【问题标题】:Maven assembly dependent on assembly?Maven 程序集依赖于程序集?
【发布时间】:2016-03-12 04:50:02
【问题描述】:

我正在尝试创建一个依赖于内置程序集jar-with-dependencies 的输出的程序集。生成的程序集特定于架构。

例如我想创建一个 ZIP,其中包含 jar-with-dependencies 的 JAR 输出以及一个脚本文件和一个库目录。

我尝试了以下方法。在pom.xml 文件中:

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    <descriptors>
      <descriptor>src/main/assembly/linux64.xml</descriptor>
      <descriptor>src/main/assembly/windows64.xml</descriptor>
    </descriptors>
    <archive>
      <manifest>
        <mainClass>es.entrees.BoxOffice</mainClass>
      </manifest>
    </archive>
  </configuration>
</plugin>

然后是描述符文件。其中之一:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
  <id>linux64</id>
  <formats>
    <format>zip</format>
  </formats>
  <files>
    <file>
      <source>target/${project.artifactId}-${project.version}-jar-with-dependencies.jar</source>
      <outputDirectory>/</outputDirectory>
    </file>
  </files>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    ...
  </depdendencySets>
</assembly>

但自定义描述符首先运行,而jar-with-dependencies 的输出尚未出现。

我应该使用子模块吗?

【问题讨论】:

    标签: java maven maven-2 maven-assembly-plugin


    【解决方案1】:

    maven-assembly-plugin 需要执行 2 次:

    • 第一个绑定到prepare-package 阶段,将创建jar-with-dependencies
    • 另一个绑定到package,将创建压缩文件。

    在构建生命周期中,prepare-package 阶段在 package 阶段之前运行,这样可以确保 JAR 在 ZIP 之前构建。此外,它还记录了创建 JAR 准备最终打包的事实,即 ZIP 文件。

    示例pom.xml 将是:

    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.6</version>
      <executions>
        <execution>
          <id>make-jar-with-dependencies</id>
          <phase>prepare-package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <archive>
              <manifest>
                <mainClass>es.entrees.BoxOffice</mainClass>
              </manifest>
            </archive>
          </configuration>
        </execution>
        <execution>
          <id>make-zip</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptors>
              <descriptor>src/main/assembly/linux64.xml</descriptor>
              <descriptor>src/main/assembly/windows64.xml</descriptor>
            </descriptors>
          </configuration>
        </execution>
      </executions>
    </plugin>
    

    通过以下方式,使用mvn clean install 运行 Maven 将正确创建 ZIP。

    【讨论】:

    • 我正在尝试了解默认执行是什么......是否可以只运行我们配置的执行,而不编译、调用测试等?
    • @clapas 你可以参考to this question
    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    相关资源
    最近更新 更多