是否可以使用maven属性根据文件激活配置文件?

时间:2016-03-11 14:49:09

标签: maven dependencies maven-profiles

当我们不在我的本地存储库中时,我想下载JACOB dll。

因此,我有两个配置文件

    <profile>
        <id>use-jacob-dll</id>
        <activation>
            <file>
                <exists>${settings.localRepository}/com/hynnet/jacob/1.18/jacob-1.18-x64.dll</exists>
            </file>
        </activation>
        <dependencies>
            <dependency>
                <groupId>${jacob.groupId}</groupId>
                <artifactId>jacob</artifactId>
                <type>dll</type>
                <classifier>x64</classifier>
                <version>${jacob.version}</version>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>download-jacob-dll</id>
        <activation>
            <file>
                <missing>${settings.localRepository}/com/hynnet/jacob/1.18/jacob-1.18-x64.dll</missing>
            </file>
        </activation>

但是,即使download-jacob-dll已完成目标,对mvn help:active-profiles的调用也会显示以下内容

The following profiles are active:

 - tests-for-eclipse (source: com.capgemini.admdt:kpitv:1.2.4-SNAPSHOT)
 - download-jacob-dll (source: com.capgemini.admdt:kpitv:1.2.4-SNAPSHOT)

我怀疑这是因为我在激活属性中使用了${settings.localRepository}

问题:这是失败的原因吗?如果是这样,我怎样才能在缺少依赖时激活我的个人资料?

1 个答案:

答案 0 :(得分:0)

  

是否可以使用maven属性根据文件激活配置文件?

不,如Maven documentation on profiles

所述
  

支持的变量是${user.home}等系统属性和${env.HOME}等环境变量。请注意,POM本身定义的属性和值不能用于插值,例如上面的示例激活器不能使用${project.build.directory},但需要对路径目标进行硬编码。

然而,从POM documentation我们也得到了

  

给定的文件名可以通过存在文件来激活配置文件,或者如果它丢失了。注意:此元素的插值仅限于${basedir},系统属性和请求属性。

因此,除了 ${basedir}之外,确实没有Maven属性

  

如果是这样,我怎样才能在缺少依赖性时激活我的个人资料?

通过硬编码路径到依赖关系或相关文件将是一个解决方案,即使不像你想要的解决方案那样可移植。

或者您可以使用上述文档中提到的请求属性,因此需要使用必须从命令行传递的属性来配置激活(更便携但更脆弱) ):

<activation>
    <file>
        <missing>${path}/com/hynnet/jacob/1.18/jacob-1.18-x64.dll</missing>
    </file>
</activation>

然后按如下方式调用maven:

mvn clean install -Dpath=path_to_local_rep

上述解决方案在某些情况下可能是合理的,例如Jenkins的工作。