我的旧项目的一个mavenized版本创建了两个Jar文件,一个用于命令行,另一个用于GUI。就目前而言,它只将主工件部署到本地存储库。通过为maven-jar-plugin执行两次执行来创建jar,并且两者都在目标目录中创建。会发生什么是GUI文件用错误的名称覆盖主文件:
[INFO] Installing /Users/gmcgath/DevProjects/git/jhove/target/jhove-GUI-1.12.0-SNAPSHOT.jar to /Users/gmcgath/.m2/repository/edu/harvard/hul/ois/jhove/1.12.0-SNAPSHOT/jhove-1.12.0-SNAPSHOT.jar
我尝试使用build-helper插件将GUI jar部署到存储库,使用以下命令:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>attach-artifacts</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${project.artifactId}-GUI-${project.version}</file>
<type>jar</type>
<classifier>gui</classifier>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
Maven运行完成没有任何错误,但没有正确复制jar。该日志告诉我它正在尝试将GUI jar从项目级目录而不是目标复制到正确的目标。 GUI文件仍在覆盖主jar。
[INFO] Installing /Users/gmcgath/DevProjects/git/jhove/jhove-GUI-1.12.0-SNAPSHOT to /Users/gmcgath/.m2/repository/edu/harvard/hul/ois/jhove/1.12.0-SNAPSHOT/jhove-1.12.0-SNAPSHOT-gui.jar
(&#34;哈佛&#34;部分是历史性的。保持这个开源项目是我的遣散费的一部分。:)
所以我做的事情基本上是错的。我怎样才能解决这个问题?我是否应该使用汇编插件,即使它看起来更复杂?
更新:部分修复。工件中的文件元素必须是
<file>${project.build.directory}/${project.artifactId}-GUI-${project.version}.jar</file>
我仍然在寻找修复程序来正确复制主要工件。
答案 0 :(得分:1)
好的,这是我的修复。如上所述,第一部分是在build-helper工件中获取目录和扩展名。应该是
<file>${project.build.directory}/${project.artifactId}-GUI-${project.version}.jar</file>
另一个问题是我没有发布的pom.xml的一部分。这两个执行没有分类元素,所以看起来像这样:
<executions>
<execution>
<!-- console app - don't change id, will cause build problems -->
<id>default-jar</id>
<phase>package</phase>
<goals><goal>jar</goal></goals>
<configuration>
<classifier>cmd</classifier>
<archive>
<manifest>
<mainClass>Jhove</mainClass>
</manifest>
</archive>
</configuration>
</execution>
<execution>
<id>gui-app-jar</id>
<phase>package</phase>
<goals><goal>jar</goal></goals>
<configuration>
<classifier>gui</classifier>
<archive>
<manifest>
<mainClass>JhoveView</mainClass>
</manifest>
</archive>
<finalName>${project.artifactId}-GUI-${project.version}</finalName>
</configuration>
</execution>
</executions>
现在一切都很好。