You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven编译Vaadin自定义组件时Manifest变量未替换致上传失败求助

Vaadin组件上传错误:Manifest中Implementation-Vendor变量问题

先给你拆解下问题根源和解决办法:

一、${project.organization.name}是什么?

这不是路径变量,是Maven的属性占位符。它的作用是引用Maven项目配置(也就是pom.xml)里的对应属性值,${project.organization.name}特指你项目pom.xml中<organization>标签下<name>字段的内容。

你现在上传失败的核心原因是:Maven编译打包时,没有把这个占位符替换成实际的文本值,导致最终jar包的Manifest里,Implementation-Vendor还是${project.organization.name}这个占位符字符串,Vaadin的校验逻辑会认为这个属性缺失,所以报错。

二、怎么在Maven编译时让它生效?

有两种常见的处理方式,选一种适合你的就行:

方式1:直接配置pom.xml的组织信息

在你的项目pom.xml里添加或完善<organization>节点,示例如下:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!-- 其他已有配置 -->
    
    <organization>
        <name>你的组织/厂商名称</name> <!-- 比如"Foo Tech Labs" -->
        <url>https://your-company-site.com</url> <!-- 可选,填你的组织官网 -->
    </organization>
    
    <!-- 其他已有配置 -->
</project>

配置完成后,重新执行mvn clean install,Maven会自动把Manifest里的${project.organization.name}替换成你这里填的<name>值。

方式2:自定义属性替换

如果你不想用<organization>的名称,也可以在pom.xml里自定义一个属性,然后引用它:

  1. 先在pom.xml的<properties>里添加自定义属性:
<project>
    <!-- 其他配置 -->
    <properties>
        <custom.vendor.name>自定义的厂商名称</custom.vendor.name>
    </properties>
    <!-- 其他配置 -->
</project>
  1. 然后修改你的Manifest文件,把Implementation-Vendor: ${project.organization.name}改成:
Implementation-Vendor: ${custom.vendor.name}

重新打包后,这个占位符就会被替换成你自定义的名称。

额外建议:用Maven插件管理Manifest

其实你也可以不用手动维护Manifest文件,直接通过maven-jar-plugin在pom.xml里配置所有Manifest属性,这样更不容易出错,示例配置如下:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.3.0</version> <!-- 选一个兼容你Maven版本的插件版本 -->
            <configuration>
                <archive>
                    <manifest>
                        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                    </manifest>
                    <manifestEntries>
                        <Manifest-Version>1.0</Manifest-Version>
                        <Vaadin-Package-Version>1</Vaadin-Package-Version>
                        <Vaadin-Addon>test-0.1.jar</Vaadin-Addon>
                        <Vaadin-License-Title>Apache License 2.0</Vaadin-License-Title>
                        <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
                        <Implementation-Title>MyComponent Add-on</Implementation-Title>
                        <Implementation-Version>0.1</Implementation-Version>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

这种方式下,Maven会自动帮你生成正确的Manifest文件,所有占位符都会被正确替换。

做完上面的配置后,重新执行mvn clean install,再检查target里jar包的Manifest内容,Implementation-Vendor应该已经是实际的文本值了,这时候再上传到Vaadin目录就不会报错了。

内容的提问来源于stack exchange,提问作者user4375474

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:04:07