当我们不在我的本地存储库中时,我想下载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}
。
问题:这是失败的原因吗?如果是这样,我怎样才能在缺少依赖时激活我的个人资料?
答案 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的工作。