2015-04-29 111 views
4

我想打包两个或更多非常相似的分布,唯一的区别是将在这些分布内的数据集的路径。Maven组件描述符属性

鉴于这个例子路径:$ {} project.basedir/SRC /配置/数据集1

<?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

回答

3

是的,你可以使用属性这一点。

  1. 为在pom.xml之间执行不同的零件创建属性(使用默认值)。例如:
<properties> 
    <dataset.dir>config/dataset</dataset.dir> 
</properties> 
  • 使用他们在您的装配描述符,就像任何其他财产(如${project.basedir}

  • 对于不同的执行你可以:

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

    • ,或者直接将值作为一个MVN调用的参数(如mvn package -Dprop=val

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

    +0

    我知道这种可能性,但那不是我正在寻找的。配置文件是一种可怜的解决方案,我仍然希望有更好的东西.. – vehovmar

    +0

    你可以将任何属性传递给maven像'mvn install -Dproperty = value',但我仍然认为在一个地方声明所有可能的属性值) 更好。 – arghtype

    +0

    不要误解我的意思,在pom中声明属性是非常好的。使用配置文件创建不同的分发版本比解决方案更复杂,而且我滥用配置文件。 – vehovmar

    相关问题