Maven程序集描述符属性

时间:2015-04-29 12:41:48

标签: 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>

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

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

有没有办法解决这个问题,比如创建多个执行并向其传递属性?或者更好的东西?

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

1 个答案:

答案 0 :(得分:4)

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

  1. pom.xml中执行的不同部分创建属性(使用默认值)。 E.g:
  2. <properties>
        <dataset.dir>config/dataset</dataset.dir>
    </properties>
    
    1. 在汇编描述符中使用它们就像任何其他属性一样(例如${project.basedir}

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

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

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

    3. 此外,如果要在任何其他位置使用这些属性,可以使用其他maven插件(例如,maven-resource-plugin)在任何配置中通过占位符填充它们。