java - 使用相同描述符 Maven 程序集插件自定义不同格式的文件夹名称

标签 java maven maven-plugin maven-assembly-plugin

我是 Maven 世界的新手,我在使用 Maven 程序集插件时遇到一些问题。我想使用相同的描述 rune 件来生成具有自定义名称的“dir”格式的不同格式。

以下是我的 Maven 程序集插件配置:-

    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
            <execution>
                <id>assembly</id>
                <goals>
                    <goal>single</goal>
                </goals>
                <phase>install</phase>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/descriptor.xml</descriptor>
                    </descriptors>
                    <finalName>service</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <outputDirectory>target</outputDirectory>
                </configuration>
            </execution>
        </executions>
    </plugin>

这是描述 rune 件:-

<assembly
        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
    <id>assembly</id>
    <formats>
        <format>zip</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <baseDirectory>.</baseDirectory>
    <files>
        <file>
            <source>target/service.jar</source>
            <outputDirectory>.</outputDirectory>
            <filtered>false</filtered>
        </file>
        <file>
            <source>src/main/deploy/version.txt</source>
            <outputDirectory>.</outputDirectory>
            <filtered>true</filtered>
        </file>
        <file>
            <source>src/main/deploy/start.sh</source>
            <outputDirectory>.</outputDirectory>
            <filtered>true</filtered>
        </file>
        <file>
            <source>src/main/deploy/stop.sh</source>
            <outputDirectory>.</outputDirectory>
            <filtered>true</filtered>
        </file>
    </files>
</assembly>

我想在 service.zip 中使用相同的描述 rune 件(基本上是相同的文件来组合),并且如果我添加,还可以在名为 deploy 的目标中创建另一个文件夹

<format>dir</format>

然后它将在目标下创建一个名为 service 的文件夹,并将包含所有列出的文件。我想要一种将目录名称自定义为“部署”的方法。我尝试检查文档,但找不到任何有用的信息,除非我创建另一个描述符,这不是正确的方法,因为我的新描述符将具有与前一个描述符相同的配置,格式仅为“dir”。

任何帮助将不胜感激,提前致谢。

最佳答案

您可以通过使用不同的 maven profiles 来达到您的要求。在

在程序集描述符中,您使用属性而不是固定字符串:

<formats>
    <format>${distributionFormat}</format>
</formats>

distributionFormatpom.xml 中定义。属性的名称是您的选择。

pom.xml 中,您在两个不同的配置文件中定义 distributionFormat。您还可以在此处定义程序集的名称(在我的示例中为 assemblyName )。

<project>
    ...
    ...
    <profiles>
         <profile>
              <id>distAsZip</id>
              <activeByDefault>true</activeByDefault>
              <assemblyName>service</assemblyName>
              <distributionFormat>zip</distributionFormat>
         </profile>
         <profile>
              <id>distAsDir</id>
              <activeByDefault>false</activeByDefault>
              <assemblyName>deploy</assemblyName>
              <distributionFormat>dir</distributionFormat>
         </profile>
    </profiles>
    ...
    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
            <execution>
                <id>assembly</id>
                <goals>
                    <goal>single</goal>
                </goals>
                <phase>install</phase>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/descriptor.xml</descriptor>
                    </descriptors>
                    <finalName>${assemblyName}</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <outputDirectory>target</outputDirectory>
                </configuration>
            </execution>
        </executions>
    </plugin>
 ...
</project>

现在您可以执行 Maven 并定义要使用的配置文件:
mvn clean package -PdistAsDirmvn clean package -PdistAsZip

关于java - 使用相同描述符 Maven 程序集插件自定义不同格式的文件夹名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41271210/

相关文章:

java - 不可能在 ArrayList.get() 上发生 IndexOutOfBound。有什么线索吗?

java - 使用 java 和用户输入编写命令

java - 使用 Sonar(或其他)对测试进行依赖性分析

maven - 确保 Maven 构建是独立的

spring-mvc - spring mvc模板项目maven插件报错

java - 从对 verify() 的调用中获取 InvalidUseOfMatchersException,即使所有参数的类型都是 'Matchers'

java - DalvikVM 垃圾收集器会停止整个虚拟机吗?

java - 无法在 eclipse (jundo) 中配置 Maven

java - 有没有办法通过POM.xml修改classpath?

java - 传递给maven插件的参数的优先级是什么?