请参阅jvm.config中的相关文件

时间:2016-08-18 14:51:46

标签: java maven maven-3 multi-module

我们的artifactory maven存储库只能通过https访问,但使用的是自签名证书。我们希望让新开发人员尽可能轻松地登录,因此我们选择不将证书添加到默认的Java密钥库。

相反,我创建了一个包含所有自签名证书的新密钥库,并在/project-files/keystore.jks项目的根目录中进行了检查。我还添加了/.mvn/jvm.config,它设置了一些项目特定的jvm选项(在maven 3.3.1中引入)。我的第一次尝试是

-Djavax.net.ssl.trustStore=/project-files/keystore.jks
-Djavax.net.ssl.trustStorePassword=password`

如果您在根目录中运行maven,但是如果我从其子目录运行单个模块,则它无法找到信任存储并失败。

然后我添加了一个shell变量PROJECT_BASEDIR,我的jvm.config中的trustStore变成了-Djavax.net.ssl.trustStore=$PROJECT_BASEDIR/project-files/keystore.jks。但是,它仍然找不到信任存储。如果我使用ps查看该过程,结果表明该变量未得到解决。我也尝试了-Djavax.net.ssl.trustStore=${project.parent.basedir}/project-files/keystore.jks,但这也没有用。

有人知道这个问题的解决方案吗?

1 个答案:

答案 0 :(得分:0)

MNG-5767功能(项目特定的默认jvm选项和命令行参数)是Maven中添加的一个很棒的功能,在许多情况下都很方便,但它仍处于基本级别,它不提供高级行为(如果需要)。

对于常见和全局配置的多模块项目,它非常强大,因为在从当前目录构建模块时也会选择它(因此选择其父项的.mvn/jvm.config),但它具有一些限制(根据我在撰写本文时对最新Maven版 3.3.9 的测试):

  • 您无法使用其他.mvn/jvm.config覆盖模块级别的值,但会忽略它们
  • 你不能拥有相对路径,并期望从模块目录构建中正常工作,因为它也会在从其目录中建立模块时使用(同样,因此选择父.mvn/jvm.config)并且这种破坏相对路径分辨率
  • 你不能拥有maven属性占位符,因为它们不会被替换(在maven构建阶段过早执行它)

在这种情况下,实际上通常建议是使用reactor options从根/父文件夹构建模块,并通过项目列表(-pl)指定模块名称。

mvn -pl <module-name>

这样做,相对路径不应该被打破,你也可以利用单个构建的多模块构建行为,例如:通过源代码本地解决模块间依赖关系(因为从根pom.xml文件Maven知道某个依赖是否是模块)而不是通过maven依赖关系(因为直接构建模块时,Maven没有&#39;了解其他模块,并尝试像任何其他依赖项一样解决模块间依赖关系,查看本地缓存和存储库,并且可能不会获取最新代码。)