当我创建一个jar文件时,我想要适应我的依赖项。为此,我使用maven-assembly-plugin
如下:
<build>
...
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<finalName>${project.artifactId}-GUI</finalName>
<archive>
<manifest>
<mainClass>gui.MyMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- <appendAssemblyId>false</appendAssemblyId>-->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
此代码可以正常运行,并且可以执行预期的操作。但是,这会创建一个名为myjar-GUI-jar-with-dependencies.jar
的新jar。我想消除那些&#34; jar-with-dependencies&#34;结尾。有谁知道怎么做?
我已经使用了您可以在我的代码中看到的注释行,但这会产生以下警告:我不知道如何解决它:
[WARNING] Configuration options: 'appendAssemblyId' is set to false, and 'classifier' is missing.
Instead of attaching the assembly file: [myJar-GUI].jar, it will become the file for main project artifact.
NOTE: If multiple descriptors or descriptor-formats are provided for this project, the value of this file will be non-deterministic!
[WARNING] Replacing pre-existing project main-artifact file: [myJar].jar with assembly file: [myJar-GUI].jar
EDITED
用户Tunaki建议的解决方案之后,我使用了不同的插件和maven,因为我希望它能够实现。代码如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>gui.SparkISGUI</mainClass>
</transformer>
</transformers>
</configuration>
</plugin>
答案 0 :(得分:9)
首先,您需要了解收到此警告的原因。
Maven约定是一个项目应该创建单个主要工件。对于打包jar
的项目,主要工件是maven-jar-plugin
的结果。这个插件只会将JAR打包成项目中包含的类。
一个项目最终可以生成其他工件,这些工件将通过classifier与主要工件区分开来:
除了主要工件之外,还可以添加附加到Maven项目的其他文件。这种附加的字段可以被其分类器识别和访问。
分类器是将附加到主工件名称的标识符。
那么当你想创造一个超级罐时会发生什么?不知何故,您的项目需要生成两个罐子。主要的是一个包含项目类的JAR,第二个是由maven-assembly-plugin
生成的超级jar。为了将此次要附加工件与主要工件区分开来,添加了分类器jar-with-dependencies
。
因此,当您删除分类器时,您可以使用uber-jar有效地替换主工件。在这种情况下,maven-assembly-plugin
会发出警告,这就是您所遇到的警告。你可以完全忽略它:它只是提醒你,你正在用一个额外的工件替换项目的主要工件。
除了maven-assembly-plugin
之外,请注意您还可以使用maven-shade-plugin
生成超级jar:
这个插件提供了将工件打包在超级jar中的功能,包括它的依赖关系和 shade - 即重命名 - 一些依赖项的包。