Maven - 使用父项目中的程序集文件和配置

时间:2014-08-22 09:56:16

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

我有一个父项目,它定义了程序集插件的整个配置,包括assembly.xml文件(创建一个tar.gz)。现在我想拥有多个可以使用父项目配置和父程序集文件的子项。

现在我尝试了不同的场景,配置工作正常,但我得到的错误是不能在本地找到汇编文件。我想要实现的是不必在所有项目中反复配置和添加相同的文件。有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:1)

我使用maven-remote-resources-plugin来共享程序集描述符。首先,创建一个包含要共享的程序集描述符的单独项目。

project-assemblies
  src
    main
      resources
        <your assembly descriptors, in any package structure you like>
  pom.xml

POM的构建部分(假设这是项目com.mycompany.project:project-assemblies):

<build>
  <plugins>
      <plugin>
          <artifactId>maven-remote-resources-plugin</artifactId>
          <executions>
              <execution>
                  <goals>
                      <goal>bundle</goal>
                  </goals>
              </execution>
          </executions>
          <configuration>
              <includes>
                  <include>**/*.xml</include>
              </includes>
          </configuration>
      </plugin>
   </plugins>
</build>

要从另一个项目中引用它,请将其添加到项目的POM:

<properties>
  <shared.assemblies.dir>${project.build.directory}/assemblies</shared.assemblies.dir>
  <project-assemblies.version><yourAssemblyProjectVersion</project-assemblies.version>
</properties>

<!-- copy the assembly descriptors into this project -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-remote-resources-plugin</artifactId>
  <executions>
    <execution>
      <id>assemblies</id>
      <phase>initialize</phase>
      <goals>
        <goal>process</goal>
      </goals>
      <configuration>
        <resourceBundles>
          <resourceBundle>com.mycompany.project:project-assemblies:${project-assembly.version}</resourceBundle>
        </resourceBundles>
        <attached>false</attached>
        <outputDirectory>${shared.assemblies.dir}</outputDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>

将附件设置为false意味着捆绑包的内容不会包含在最终的项目构建中。

<!-- Apply the retrieved assembly descriptor to this project -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <executions>
    <execution>
      <id>run-assembly</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <descriptors>
          <descriptor>${shared.assemblies.dir}/<pathToAssemblyDescriptor></descriptor>
        </descriptors>
        <!-- other config here -->
      </configuration>
    </execution>
  </executions>
</plugin>

像魅力一样。

答案 1 :(得分:0)

您应该在所有子模块的pom.xml中禁用程序集:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
    <skipAssembly>true</skipAssembly>
</configuration>
</plugin>

更常见的是,建议在父pom.xml中创建一个专用的子模块来配置汇编插件而不是配置汇编插件

答案 2 :(得分:0)

好吧,在父pom.xml中创建一个专用的子模块来配置汇编插件而不是配置汇编插件

有关样本,请参阅:http://maven.apache.org/plugins/maven-assembly-plugin/examples/multimodule/module-binary-inclusion-simple.html

在此示例中,它创建了一个名为:distribution

的子模块

这是一个很好的例子!祝你好运!