Maven程序集描述符属性

veh*_*mar 6 java maven maven-assembly-plugin

我想打包两个或更多非常相似的发行版,唯一的区别是数据集的路径将在这些发行版中.

给出了路径的这个例子:$ {project.basedir}/src/config/dataset1

<?xml version="1.0" encoding="UTF-8"?>
<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>dataset1</id>
    <formats>
        <format>zip</format>
    </formats>

    <fileSets>
        <fileSet>
            <directory>${project.basedir}/src/config/dataset1/aaa</directory>
            <outputDirectory>conf/aaa</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}/src/config/dataset1/bbb</directory>
            <outputDirectory>conf/bbb</outputDirectory>
        </fileSet>
    </fileSets>

    <!-- MANY MORE FILESETS... -->

</assembly>
Run Code Online (Sandbox Code Playgroud)

现在我想要不同数据集的完全相同的汇编描述符,例如:$ {project.basedir}/src/config/dataset2

当然,我可以创建两个程序集描述符.但是,我必须记住在需要时更改多个位置,或者在添加另一个或两个数据集时更糟.

有没有办法解决这个问题,比如创建多个执行并将属性传递给它?还是更好的东西?

编辑: 这个愿望项目将解决所有问题:https: //jira.codehaus.org/browse/MASSEMBLY-445

arg*_*ype 5

是的,您可以为此使用属性。

  1. pom.xml. 例如:
<properties>
    <dataset.dir>config/dataset</dataset.dir>
</properties>
Run Code Online (Sandbox Code Playgroud)
  1. 就像任何其他属性一样在程序集描述符中使用它们(例如${project.basedir}

  2. 对于不同的执行,您可以:

    • 使用多个构建配置文件(Maven 配置文件)来覆盖属性值;

    • 或直接将值作为 mvn 调用参数传递(如mvn package -Dprop=val

另外,如果您想在任何其他地方使用这些属性,您可以使用其他 Maven 插件(例如,maven-resource-plugin)通过任何配置中的占位符填充它们。