Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven-使用父项目中的程序集文件和配置_Java_Maven_Maven 3_Maven Plugin_Maven Assembly Plugin - Fatal编程技术网

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

Java Maven-使用父项目中的程序集文件和配置,java,maven,maven-3,maven-plugin,maven-assembly-plugin,Java,Maven,Maven 3,Maven Plugin,Maven Assembly Plugin,我有一个父项目,它定义了汇编插件的整个配置,包括assembly.xml文件(创建tar.gz)。现在,我希望有多个子级可以使用父级的项目配置和父级的程序集文件 现在,我尝试了不同的方案,配置工作正常,但我得到的错误是本地找不到程序集文件。我想要实现的是不必在所有项目中反复配置和添加相同的文件。有没有办法实现这个目标 您应该在所有子模块的pom.xml中禁用程序集: <plugin> <groupId>org.apache.maven.plugins</groupI

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


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

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

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

org.apache.maven.plugins
maven汇编插件
真的

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

关于样品,请参考:

在本示例中,它创建了一个子模块:distribution


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

我使用maven远程资源插件来共享程序集描述符。首先,创建一个单独的项目,其中包含要共享的程序集描述符

project-assemblies
  src
    main
      resources
        <your assembly descriptors, in any package structure you like>
  pom.xml
项目程序集
src
主要的
资源
pom.xml
POM的构建部分(假设这是project com.mycompany.project:project assemblies):


maven远程资源插件
捆
**/*.xml
要从另一个项目中引用此项,请将其添加到项目的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>

${project.build.directory}/assemblies
org.apache.maven.plugins
maven汇编插件
管路总成
包裹
单一的
${shared.assemblies.dir}/

工作起来很有魅力。

在父级中定义maven assembly plugin的Configuration等没有意义,除非它是在pluginManagement块中定义的。@khmarbaise好的,那么我应该使用pluginManagement来定义行为?我的意思是,我想要实现的是,不必在所有项目中反复配置和添加同一个文件。如果您可以发布完整的pom文件或其示例,这将是非常有用的,因为它不能像您期望的那样工作……您能在第二个选项上展开吗?(为程序集使用专用子模块)如果我使用skipAssembly,则不会再创建预期的tar文件注意:不要在现有的父pom.xml上添加!您应该将给定的配置插入到所有子模块的pom.xmlyes,这就是我所做的。根据skipAssembly参数的配置,我得到
程序集已被跳过,如果我想安装,我得到预期的tar文件不存在,maven remote resources插件不需要共享描述符,这可以在不使用任何配置的情况下完成。
<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>
<!-- 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>