标签: maven-assembly-plugin

maven-assembly-plugin:如何使用appendAssemblyId

我有一个多模块Maven项目,在一个模块中我想在构建期间创建两个工件:

  • 主要工件是一个jar库,其他一些模块将依赖于它.
  • 一个执行一些辅助函数的可执行jar文件.没有其他模块依赖于此,它仅供用户在某些情况下手动运行.

这是我用来配置maven-assembly-plugin插件的代码:

<plugin>
    <artifactId>
        maven-assembly-plugin
    </artifactId>
    <version>2.4</version>
    <executions>
      <execution>
        <id>dist-assembly</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>

        <configuration>
          <finalName>bso</finalName>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
          <finalName>helper-${project.version}</finalName>
          <appendAssemblyId>false</appendAssemblyId>
          <archive>
            <manifest>
              <mainClass>HelperMain<mainClass>
            </manifest>
          </archive>
        </configuration>

      </execution>
    </executions>
  </plugin>
Run Code Online (Sandbox Code Playgroud)

我正在设置appendAssemblyId,false因为否则-jar-with-dependencies将附加到最终名称,我不认为有必要.省略它可以提供更清晰,更易于使用的文件名.

当我跑步时,mvn integration-test我收到以下警告:

[警告]配置选项:'appendAssemblyId'设置为false,并且缺少'classifier'.它不会附加汇编文件:[...]/target/helper-5.0.0-SNAPSHOT.jar,而是成为主项目工件的文件.

注意:如果为此项目提供了多个描述符或描述符格式,则此文件的值将是不确定的!

[警告]用程序集文件替换预先存在的项目主工件文件:[...]/target/my.module-5.0.0-SNAPSHOT.jar:[...]/target/helper-5.0.0- SNAPSHOT.jar

有两件事激怒了我:

  1. 尽管警告声称它将用helper-5.0.0-SNAPSHOT.jar替换my.module-5.0.0-SNAPSHOT.jar,但它实际上并没有这样做,并且当构建完成时,两个文件仍然具有不同的大小.

  2. 为什么有关更换工件的警告出现?

  3. 似乎classifier已弃用为什么警告要求我使用它?

java maven maven-assembly-plugin

21
推荐指数
1
解决办法
1万
查看次数

Maven - 在jar中包含依赖库而不解包依赖项?

我们正在尝试构建一个包含解压缩的依赖jar的客户端jar .清单应该有class-path依赖罐子的条目.下面的片段可以工作,但罐子是解压缩的 - 我们怎样才能阻止罐子被解压?

       <plugin>
            <artifactId>maven-assembly-plugin</artifactId>

            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>

                <archive>
                  <manifest>
                    <addClasspath>true</addClasspath>
                  </manifest>
                </archive>
            </configuration>

            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

maven-2 client-library maven-assembly-plugin

20
推荐指数
2
解决办法
3万
查看次数

maven-assembly-plugin不会在系统范围内添加依赖项

这是我的pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.sia.g7</groupId>
  <artifactId>sia</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>sia</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
     </dependency>
<dependency>
    <groupId>commons-math</groupId>
    <artifactId>commons-math</artifactId>
    <version>1.2</version>
</dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>jmathplot</groupId>
      <artifactId>jmathplot</artifactId>
      <version>1.0</version>
      <scope>system</scope>
      <systemPath>${project.basedir}/lib/jmathplot.jar</systemPath>
    </dependency>

    <dependency>
      <groupId>jgraphx</groupId>
      <artifactId>jgraphx</artifactId>
      <version>1.0</version>
      <scope>system</scope>
      <systemPath>${project.basedir}/lib/jgraphx.jar</systemPath>
    </dependency>

  </dependencies>
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.0.2</version>
      <configuration>
        <source>1.6</source>
        <target>1.6</target>
      </configuration>
    </plugin>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <appendAssemblyId>false</appendAssemblyId>
        <archive>
          <manifest>
            <mainClass>com.sia.g7.AbstractSimulation</mainClass>
          </manifest>
        </archive>
      </configuration>

    </plugin>
  </plugins>

</build>
</project>
Run Code Online (Sandbox Code Playgroud)

当我运行罐子时,我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: com/mxgraph/swing/mxGraphComponent …
Run Code Online (Sandbox Code Playgroud)

maven-2 maven-assembly-plugin

20
推荐指数
2
解决办法
2万
查看次数

如何禁止maven汇编插件跳过已添加的文件?或者允许覆盖?

几个星期以来,我一直在与maven搏斗,让它"正确"部署我们的项目.

我差不多完成但是我有一个顽固的小问题:

当我使用带有"目录"目标的maven程序集插件时

mvn assembly:directory

我得到了很多控制台输出,如下所示:

[INFO] tomcat/conf already added, skipping
 [INFO] tomcat/conf/Catalina already added, skipping
 [INFO] tomcat/conf/Catalina/localhost already added, skipping
 [INFO] tomcat/webapps already added, skipping

我编写了自己的汇编描述符,它基本上将多个FileSets复制到我们的deploy目录中的各个子目录中.只要将一个FileSet中的文件复制到另一个FileSet已经创建了基本目录结构的位置(以及一些可以覆盖的"默认"文件),就会出现上述消息.

所以,我很难搞清楚:

我如何1)抑制这些消息(但只有"已经添加"消息)或2)允许覆盖?

maven-2 maven maven-assembly-plugin

20
推荐指数
2
解决办法
1万
查看次数

Maven:将资源包含在JAR中

我有一些可怕的beaviour.我有以下Maven配置:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>Test2Certificate</artifactId>
    <version>0.1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>com.test</groupId>
        <artifactId>build</artifactId>
        <version>1.0.0</version>
    </parent>

    <properties>
        <compile.java.version>1.7</compile.java.version>
        <file.product.version>0.1.0.0</file.product.version>
        <maven.build.timestamp.format>yyyy-MM-dd HH:mm:SSS</maven.build.timestamp.format>
    </properties>

    <pluginRepositories>
        <pluginRepository>
            <id>launch4j-xml-plugin-repo</id>
            <name>launch4j-xml-plugin Repository for Maven</name>
            <url>https://launch4j-xml-plugin.googlecode.com/svn/repo</url>
        </pluginRepository>
    </pluginRepositories>

    <build>
        <finalName>${project.artifactId}_${project.version}</finalName>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>buildnumber-maven-plugin</artifactId>
                <version>1.2</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <doCheck>false</doCheck>
                    <doUpdate>false</doUpdate>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${basedir}/target</outputDirectory>
                            <includeEmptyDirs>true</includeEmptyDirs>
                            <resources>
                                <resource>
                                    <targetPath>${basedir}/target/customize</targetPath>
                                    <directory>customize</directory>
                                    <filtering>false</filtering>
                                </resource>
                                <resource>
                                    <targetPath>${basedir}/target/resources</targetPath>
                                    <directory>resources</directory>
                                    <filtering>false</filtering>
                                </resource>
                                <resource>
                                    <targetPath>${basedir}/target/xml</targetPath>
                                    <directory>xml</directory>
                                    <filtering>false</filtering>
                                </resource> …
Run Code Online (Sandbox Code Playgroud)

java resources maven maven-assembly-plugin

20
推荐指数
1
解决办法
6万
查看次数

即使在其他平台上运行,使用Maven程序集插件来设置Linux文件权限?

类似的问题:即使任务在其他平台上使用,Ant的tar任务是否可以设置Linux文件权限?

如果我使用带有'project'描述符的Maven 2程序集插件,有没有办法将shell脚本权限设置为可执行文件,例如包含的build.sh脚本文件?

例:

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>project</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

这将创建三个文件

  • -project.tar.bz2
  • -project.tar.gz
  • -project-ZIP

我想将tar文件中所有*.sh文件的文件权限设置为'executable'.

java file-permissions tar maven maven-assembly-plugin

19
推荐指数
1
解决办法
2万
查看次数

如何在maven jar构建过程中包含外部jar?

我想在maven中构建一个带有依赖项的.jar文件.不幸的是,我必须在buildpath中包含一些外部.jars.当我现在尝试使用maven包构建此项目时,我将收到一个错误,即找不到那些外部.jars.

如何调整我的pom文件来添加这些罐子?当前:

    <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2-beta-4</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    </plugins>
Run Code Online (Sandbox Code Playgroud)

jar maven-plugin maven maven-assembly-plugin

19
推荐指数
2
解决办法
5万
查看次数

Maven程序集:添加相同工件的不同版本

我使用maven程序集插件创建我的应用程序存档.我的pom中存在的所有依赖都包含在内,没有任何问题.

现在我需要包含两个或更多版本的相同工件.

如果在我的pom我放

<dependencies>
        [...]
        <dependency>
            <groupId>db.test</groupId>
            <artifactId>my-model</artifactId>
            <version>1.0.3</version>
        </dependency>
        <dependency>
            <groupId>db.test</groupId>
            <artifactId>my-model</artifactId>
            <version>1.1.0</version>
        </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

源代码依赖性解析器删除旧版本,只有1.1.0打包在存档中

我尝试使用程序集xml描述符文件包含jar.我没有找到任何解决方案.

一种可能的解决方案是手动将所有需要的model.jar放入文件夹中,并告诉程序集将其复制到存档中.但我正在寻找一个更可配置的解决方案.

任何的想法 ?

java maven-2 maven-plugin maven-assembly-plugin

18
推荐指数
2
解决办法
2万
查看次数

使用CI/Hudson支持为多个环境[prod,test,dev]生成工件的Maven最佳实践?

我有一个项目需要部署到多个环境(prod,test,dev).主要区别主要在于配置属性/文件.

我的想法是使用配置文件和覆盖来复制/配置专用输出.但是如果我必须使用专门的分类器生成多个工件(例如:"my-app-1.0-prod.zip/jar","my-app-1.0-dev.zip/jar")或者我应该为每个环境创建多个项目,一个项目?!
我应该使用maven-assembly-plugin为每个环境生成多个工件吗?无论如何,我需要一次生成所有这些,所以它接缝的配置文件不适合...仍然困惑:(

任何提示/示例/链接都将受到欢迎.

作为一个侧面问题,我也想知道如何在CI Hudson/Bamboo中实现这一点,以便为所有环境生成和部署这些生成的工件,并将其部署到适当的服务器上(例如:使用SCP Hudson插件)?

maven-2 maven maven-assembly-plugin

17
推荐指数
2
解决办法
1万
查看次数

使用Maven程序集插件组合Jar-with-dependencies和ZIP文件

我想将我在JAR中的源代码与所有依赖项结合起来,并将其与其他文件一起打包成一个zip文件.我能够创建一个包含所有依赖项的Jar以及ZIP文件,但我无法将两者结合起来.

我最终想要zip文件中的以下目录结构:

装载机/斌/ shellscript.sh

装载器/ LIB /罐与 - dependencies.jar

装载器/应用程序的名字/配置/ config.xml中

这是我的pom文件的摘录:

<plugins>
    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                       <mainClass>fully.qualified.MainClass</mainClass>
                    </manifest>
                 </archive>
                 <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                 </descriptorRefs>
                 <descriptors>
                    <descriptor>src/main/assembly/assembly.xml</descriptor>
                 </descriptors>
              </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

这是我装配的摘录

<assembly>
    <id>bin</id>
    <!-- Specifies that our binary distribution is a zip package -->
    <formats>
        <format>zip</format>
    </formats>

    <baseDirectory>SpreadsheetLoaderApp</baseDirectory>

    <fileSets>
        <fileSet>
            <directory>corporatebondpurchases</directory>
            <outputDirectory>${basedir}/corporatebondpurchases/config</outputDirectory>
            <includes>
                <include>*.xml</include>
                <include>*.properties</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>corporatebondpurchases</directory>
            <outputDirectory>${basedir}/bin</outputDirectory>
            <includes>
                <include>*.sh</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>
Run Code Online (Sandbox Code Playgroud)

以下是部分构建的输出:

[INFO] --- maven-assembly-plugin:2.4:single (default-cli) @ SpreadsheetLoader ---
[INFO] Reading assembly descriptor: src/main/assembly/assembly.xml
[INFO] Building …
Run Code Online (Sandbox Code Playgroud)

java jar maven maven-assembly-plugin

17
推荐指数
1
解决办法
7127
查看次数