难以使用Maven部署第二个工件

时间:2014-06-16 15:56:41

标签: maven jar

我的旧项目的一个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>

我仍然在寻找修复程序来正确复制主要工件。

1 个答案:

答案 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>

现在一切都很好。