【问题标题】:maven assembly plugin: descriptorRef not using basedirmaven 程序集插件:descriptorRef 不使用 basedir
【发布时间】:2018-03-22 14:12:20
【问题描述】:

我正在使用 maven 程序集插件来压缩我的 Web 应用程序 dist 文件夹。 我使用这个descriptorRef 文件:

<assembly>
    <id>webapp-build</id>
    <formats>
        <format>zip</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>dist</directory>
            <outputDirectory>.</outputDirectory>
            <includes>
                <include>**/*</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

我将它用作父 pom 中的依赖项,如下所示:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.0</version>
    <dependencies>
        <dependency>
            <groupId>com.company</groupId>
            <artifactId>build-tools</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <id>webapp-build</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
                <descriptorRefs>
                    <descriptionRef>webapp-build</descriptionRef>
                </descriptorRefs>
                <basedir>${project.assembly.directory}</basedir>
            </configuration>
        </execution>
    </executions>
</plugin>

根据使用这个父 pom 的孩子,我想告诉在哪个目录中,maven 程序集插件必须使用webapp-build 程序集描述符。我尝试使用 &lt;basedir&gt; 属性,但它没有使用它。有什么想法吗?

【问题讨论】:

    标签: maven maven-assembly-plugin


    【解决方案1】:

    descriptorRef is intendedclasspath 加载程序集描述符或使用预定义的描述符。如果你喜欢使用给定的描述符,你必须使用descriptors,而不是像这样:

     <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
              <execution>
                <id>assemblies</id>
                <phase>package</phase>
                <goals>
                  <goal>single</goal>
                </goals>
                <configuration>
                  <descriptors>
                    <descriptor>src/assembly/assembly.xml</descriptor>
                  </descriptors>
                </configuration>
              </execution>
            </executions>
          </plugin>
    
        </plugins>
      </build>
    

    此外,maven-assembly-plugin:single 不存在 basedir 配置元素

    【讨论】:

    • 没错,我忘了加载依赖项以使用descriptorRef。关于basedir,是否有任何解决方法可以根据子项目在不同目录中使用程序集描述符?
    • 为什么要从不同的目录加载它,这取决于我们是否在 child 中并从 dir 1 加载,而在 child b 中我们使用 dir 2 ?这是maven目录布局中的默认位置......此外,我不确定为什么您需要为孩子们​​提供不同的东西?通常你制作一个单独的 dist 模块,其中包含描述符以及 maven-assembly-plugin 的用法?
    • 一个孩子需要使用构建程序集描述符来压缩位于根应用程序级别的dist 文件夹。另一个孩子需要使用构建程序集描述符来压缩位于target 目录中的dist 文件夹。为此,我想设置一个"working directory",以便能够在根应用程序级别或target 目录中使用具有相对路径的构建程序集描述符。有没有办法这样做?否则我需要两个程序集描述符,具体取决于dist 文件夹的位置...
    • 你能在 Github 上做一个示例设置,看看你真正喜欢什么,因为我觉得你做错了什么..
    • 希望对您有所帮助:github.com/louisamoros/mvn-angular-assembly
    【解决方案2】:

    &lt;basedir&gt; 不是assembly:single 的参数。有descriptorSourceDirectory

    descriptorSourceDirectory:

    用于扫描描述符文件的目录。注意:这可能不适用于程序集组件。

    【讨论】:

      猜你喜欢
      • 2011-06-29
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 2011-08-27
      相关资源
      最近更新 更多