32

我正在使用 maven 程序集插件生成一个.tar包含其他几个文件、依赖 jar 的文件。所有文件都被正确复制到 config 中的给定文件夹中assembly.xml

我也想在最终的 tar 文件中包含原始项目 jar,但目前在其中没有看到它。

assembly:single发出目标时,我确实收到以下消息:

[警告] 不能包含项目工件:com.my.newpkg.project1:jar:0.0.3.0; 它没有关联的文件或目录。

在阅读了 SO 之后,似乎添加了以下配置pom.xml应该添加 jar,但仍然没有得到预期的结果。

pom.xml 中的配置

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-jar-plugin</artifactId>
   <version>2.4</version>
   <configuration>
       <archive>
           <manifest>
               <mainClass>com.my.newpkg.project1.MainClass</mainClass>
               <addClasspath>true</addClasspath>
               <classpathPrefix>lib/</classpathPrefix>
           </manifest>
       </archive>
   </configuration>
</plugin>

assembly.xml 的片段

<formats>
    <format>dir</format>
    <format>tar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
    <dependencySet>
        <outputDirectory>lib</outputDirectory>
        <excludes>
            <exclude>junit:junit</exclude>
        </excludes>
        <fileMode>0755</fileMode>
    </dependencySet>
</dependencySets>

那么,配置还不正确?还是我在这里遗漏了什么?

我们如何将当前项目的 jar 添加到最终的 tar

4

1 回答 1

61

<dependencySet>您可以通过说 排除当前项目 jar <useProjectArtifact>false</useProjectArtifact>,但默认情况下它是正确的,所以它应该可以工作。

从警告来看,您似乎需要先做,但由于一些内部 Maven 问题,如果您这样做并且在单独的命令中mvn package它不起作用。mvn packagemvn assembly:single

如果您mvn package assembly:single在一个命令中执行此操作,它将起作用。

或者,在您的 pom 中添加 maven-assembly-plugin 并将其绑定到“包”阶段,以便它会自动触发mvn package

   <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <id>tar-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <descriptors>
                <descriptor>etc/assembly.xml</descriptor>
              </descriptors>
            </configuration>
          </execution>
        </executions>
      </plugin>
于 2013-01-11T11:07:35.663 回答