知识查缺补漏, 遇到之前忽略的,就记下来。
最近开始接手做一些老项目,老到什么程度,回到十几年前,大学刚毕业, 使用 java servlet 的时候。 页面渲染可能还没有开始用 jsp。 看起来项目后来用 maven 改造过。经历过这些项目的,都是阅读过各种源代码,技能扎实,有故事的人。
项目中有一个引用,也是让我研究了半天,不是一小会的那个半天,而是从中午到下午,到第二天早上才解决的那种。暴露了技能上的弱点,就记下来,积累起来当做经验
pom 文件定义了 weblogic 中依赖的 jar 包
<dependency>
<groupId>WLS</groupId>
<artifactId>org.glassfish.jersey.core.jersey-server</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${env.AS_HOME}/oracle_common/modules/org.glassfish.jersey.core.jersey-server.jar</systemPath>
</dependency>
看到在这个依赖中,使用<systemPath>定义了 jar 包的本地系统路径。而且在路径当中引用了环境变量${env.AS_HOME}.
因为平时这样使用的机会比较少,学习 maven 的时间太久了,这些细碎的知识点忘记了。在 Intellij Idea 当中,maven install 不过,提示找不到 jar 包的路径。
第一个想法 ,到本地机器找找,记得以前安装过 weblogic 了, 看看在 weblogic 安装路径下,确实有这个 jar 包存在,直接把${env.AS_HOME}这里改成绝对路径。 OK, 问题解决,可以 build 下去了。
但想想, 这些代码在测试和生产环境使用 CICD 工具,是可以构建成功的,说明这个代码没问题。所以产生了第二个想法
${env.AS_HOME}, 看起来是环境变量, 那在环境变量当中添加一个。
重启 Intellij idea, maven install, 失败,找不到这个 jar 包。
心里一直在打鼓,一直想知道, maven 是怎样加载环境变量的? maven 支持使用环境变量吗?如果不支持,这个变量在哪里设置的?Profile 里?setting.xml 哪个位置?
先在网上找找,确定是否支持环境变量。
在文章https://www.cnblogs.com/bravetian/p/12497180.html 中介绍了 maven 的六类属性
- 内置属性, 如${basedir}, ${version}等
- Pom 属性,在 pom 文件中定义的元素,如${project.build.sourceDirectory}, ${project.version}等
- 自定义属性, 用户在 pom 文件的 properties 中定义的 Maven 属性
- Settings 属性, 用户使用 settings.开头属性引用 setting.xml 文件中 xml 元素的值
- Java 系统属性, 所有 Java 系统属性都可以使用 Maven 属性引用
- 环境变量属性, 所有环境变量都可以使用以 env.开头的 Maven 属性引用
能够看到,Maven 支持环境变量属性,使用 env.开头,引用环境变量。这样看来,我的环境变量定义错了,修改环境变量
重启 intellij idea, 跑 Maven install, 成功
回头想想,一方面存在技术债,没有留意这些实现细节,另外自己思考的问题,没有注意 env.开头是个环境变量。
记录下来,积累,共勉