我有一个生成 jar 的 Maven 项目,但没有附加 maven-assemble-plugin 的appendAssemblyId。
如何让 Maven 停止发出警告:“配置选项‘appendAssemblyId’设置为 false。” ?
编辑: 我被要求包含 pom 文件,但我不允许这样做。我包含了导致错误的 maven-assemble-plugin 块。
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>some.company.hello</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- prevent appending <descriptorRef> "jar-with-dependencies" to final jar name -->
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<!-- For inheritance merges -->
<id>make-assembly</id>
<!-- bind to the packaging phase -->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
这个答案解释了技术细节,但我认为关键是你在问题中提到的短语。
我有一个生成 jar 的 Maven 项目,但没有附加 maven-assemble-plugin 的appendAssemblyId。
如果我理解正确,我认为这意味着在您的 pom 文件中,您有一个条目表示
<packaging>jar</packaging>
这样做的作用是创建一个与 maven- assembly-plugin 的输出竞争的 jar 文件,并且 maven- assembly-plugin 胜出,从而导致只有一个 jar 文件。事实上,如果您将
appendAssemblyId
设置回 true
,您将在输出目录中获得两个文件 - <artifact>.jar
和 <artifact>-jar-with-dependencies.jar
。
因此,首先,您应该删除上面提到的
<packaging>
标签,并将以下内容添加到 pom 文件的 <executions>
部分,这样就不会有两个冲突/竞争的 jar 文件(并且警告将消失)离开):
<execution>
<id>default-jar</id>
<phase>none</phase>
</execution>
我也遇到了同样的问题,我希望标准命名的 jar (没有丑陋的“jar-with-dependencies”附录)是独立的,即包含所有依赖项。
但是,正如OP注意到的:
<appendAssemblyId>false</appendAssemblyId>
发出构建警告。对我来说这是一个问题,因为我有一个严格的管道,其中构建应该因警告而失败。我想保持这种状态。
解决方案是使用
<appendAssemblyId>true</appendAssemblyId>
,但随后在后续步骤中重命名生成的文件(因此具有依赖项的 jar 会覆盖默认 jar)。
也就是说,我使用
copy-rename-maven-plugin
来完成工作:
<plugin>
<groupId>com.coderplus.maven.plugins</groupId>
<artifactId>copy-rename-maven-plugin</artifactId>
<version>1.0.1</version>
<executions>
<execution>
<id>rename-file</id>
<phase>package</phase>
<goals>
<goal>rename</goal>
</goals>
<configuration>
<sourceFile>${project.build.directory}/${build.name}-jar-with-dependencies.jar</sourceFile>
<destinationFile>${project.build.directory}/${build.name}.jar</destinationFile>
</configuration>
</execution>
</executions>
</plugin>
效果:不再有警告,并且生成的jar包含依赖。
对于学分,这个片段的灵感来自于这篇文章。不过,我更改了 Maven 阶段,并改用基于变量的方法,以保持其通用性。不过,您需要在项目中定义
build.name
,例如像这样:properties