maven程序集包含最终zip / tar中的当前项目jar

时间:2013-01-11 10:45:30

标签: maven maven-assembly-plugin

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

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

发布assembly:single目标时,我收到以下消息:

  

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

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

pom.xml中的

config

<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

1 个答案:

答案 0 :(得分:44)

<dependencySet>中,您可以通过说<useProjectArtifact>false</useProjectArtifact>来排除当前项目jar,但默认情况下这是正确的,因此它应该有效。

从警告中,我猜你先忘了mvn package,所以目标目录中没有jar。

或者在一个命令中执行mvn package assembly:single

或者,在你的pom中添加maven-assembly-plugin并将其绑定到'package'阶段,以便它在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>