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

mtk*_*mtk 28 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中配置

<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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

那么,配置还不正确吗?还是我错过了什么?

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

Gee*_*nte 50

<dependencySet>你可以这样排除当前项目罐子<useProjectArtifact>false</useProjectArtifact>,但它默认为true,所以它应该工作.

从警告中,我猜你忘了先做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>
Run Code Online (Sandbox Code Playgroud)

  • 执行`mvn package assembly:single`包含jar,但如果我们将它们作为单独的命令运行,则会显示相同的警告,并且不会包含jar.**旁注:**在运行`assembly:single`之前,jar在目标文件夹中可用. (9认同)
  • 如果确实如此,您可能已经发现了一个新错误。它看起来与 http://jira.codehaus.org/browse/MASSEMBLY-372 完全相反。你能在那里报告一个新的错误,并附上你的完整项目吗?如果程序集是您构建的重要组成部分,那么无论如何最好将它包含在您的 pom 中。如果不想每次都用,可以用 &lt;profile&gt; 隔开。 (2认同)