我们的工件maven存储库只能通过https访问,但使用的是自签名证书。我们希望让新开发人员尽可能容易地上船,所以我们选择不将证书添加到默认的java密钥存储库中。
相反,我用所有的自签名证书创建了一个新的keystore,并在/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`如果您在根dir中运行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,但这也不起作用。
有人知道解决这个问题的办法吗?
发布于 2016-08-19 08:29:26
MNG-5767特性(特定于项目的默认jvm选项和命令行参数)是添加到Maven中的一个很好的特性,在许多情况下非常方便,但是它仍然处于基本级别,它不提供高级行为(如果需要的话)。
对于用于通用和全局配置的多模块项目来说,它是非常强大的,因为在从当前目录构建模块时(因此选择其父目录的.mvn/jvm.config ),它也会被选中,但是它有一些限制(根据我在撰写本文时对3.3.9的最新版本的测试):
.mvn/jvm.config覆盖模块级别的值,它们将被忽略.mvn/jvm.config),并因此破坏相对路径解析。实际上,在这种情况下,建议是使用反应堆选项从根/父文件夹构建模块,并通过项目列表(-pl)指定模块名。
mvn -pl <module-name>这样做,相对路径不应该中断,而且您还可以利用单个构建的多模块构建行为的优势,例如通过源代码在本地解决模块间依赖关系(因为从根pom.xml文件maven知道某个依赖项是否为模块),而不是通过Maven依赖项(因为在直接构建模块时,Maven不了解其他模块,并试图解决模块间的依赖关系,比如任何其他依赖项,查看本地缓存和存储库,可能不会获取最新的代码)。
https://stackoverflow.com/questions/39021341
复制相似问题