我们的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
,但这也没有用。
有人知道这个问题的解决方案吗?
答案 0 :(得分:0)
MNG-5767
功能(项目特定的默认jvm选项和命令行参数)是Maven中添加的一个很棒的功能,在许多情况下都很方便,但它仍处于基本级别,它不提供高级行为(如果需要)。
对于常见和全局配置的多模块项目,它非常强大,因为在从当前目录构建模块时也会选择它(因此选择其父项的.mvn/jvm.config
),但它具有一些限制(根据我在撰写本文时对最新Maven版 3.3.9 的测试):
.mvn/jvm.config
覆盖模块级别的值,但会忽略它们.mvn/jvm.config
)并且这种破坏相对路径分辨率在这种情况下,实际上通常建议是使用reactor options从根/父文件夹构建模块,并通过项目列表(-pl
)指定模块名称。
mvn -pl <module-name>
这样做,相对路径不应该被打破,你也可以利用单个构建的多模块构建行为,例如:通过源代码本地解决模块间依赖关系(因为从根pom.xml
文件Maven知道某个依赖是否是模块)而不是通过maven依赖关系(因为直接构建模块时,Maven没有&#39;了解其他模块,并尝试像任何其他依赖项一样解决模块间依赖关系,查看本地缓存和存储库,并且可能不会获取最新代码。)