首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参考jvm.config中的相关文件

参考jvm.config中的相关文件
EN

Stack Overflow用户
提问于 2016-08-18 14:51:46
回答 1查看 1.6K关注 0票数 2

我们的工件maven存储库只能通过https访问,但使用的是自签名证书。我们希望让新开发人员尽可能容易地上船,所以我们选择不将证书添加到默认的java密钥存储库中。

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

代码语言:javascript
复制
-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,但这也不起作用。

有人知道解决这个问题的办法吗?

EN

回答 1

Stack Overflow用户

发布于 2016-08-19 08:29:26

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

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

  • 不能使用附加的.mvn/jvm.config覆盖模块级别的值,它们将被忽略
  • 您不能拥有相对路径,并且期望从模块目录构建中正确地工作,因为它也将在从其目录中构建模块时使用(因此,获取父.mvn/jvm.config),并因此破坏相对路径解析。
  • 您不能使用maven属性占位符,因为它们不会被替换(在maven构建阶段太早就不能执行它)

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

代码语言:javascript
复制
mvn -pl <module-name>

这样做,相对路径不应该中断,而且您还可以利用单个构建的多模块构建行为的优势,例如通过源代码在本地解决模块间依赖关系(因为从根pom.xml文件maven知道某个依赖项是否为模块),而不是通过Maven依赖项(因为在直接构建模块时,Maven不了解其他模块,并试图解决模块间的依赖关系,比如任何其他依赖项,查看本地缓存和存储库,可能不会获取最新的代码)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39021341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档