maven - 如何使用 Maven 从 pom.xml 中的 settings.xml 访问元素?
问题描述
根据https://maven.apache.org/pom.html#properties应该可以用来从 pom.xml 文件中的 settings.xml 文件${settings.x}
访问元素。<settings><x>value</x></settings>
但是,当我尝试类似
<profiles>
<profile>
<activation>
<file>
<exists>${settings.localRepository}/path/to/file</exists>
</file>
</activation>
</profile>
</profiles>
在我的 pom.xml 中,它不会在有效的 pom.xml 中被替换。当我用它替换${settings.localRepository}
时,${user.home}/.m2/repository
它工作正常,但这不是我想要的。我能做些什么来解决这个问题吗?(使用 Apache Maven 3.6.0 测试。)
背景资料:
我有一个在线 Maven 存储库中不存在的依赖项,我无法更改它。它必须由用户编译,并且可以安装到本地存储库。我没有手动执行此操作,而是尝试在我的 pom.xml 中自动执行此操作。为此,如果本地存储库中不存在依赖项,我必须忽略它。因此,检查文件是否存在于本地存储库中的配置文件。如果没有配置文件,maven 甚至不会启动生命周期,因为无法解决依赖关系。当然,第一次执行 pom.xml 时项目不会编译。但是所有依赖项都会自动安装,并且项目将在第二遍中编译。我知道这不是一个干净的解决方案,但我认为它' s 比告诉用户在编译此项目之前手动编译和安装依赖项 xy 更好。我还包括一个首先运行的构建脚本mvn clean initialize
安装依赖项,然后mvn clean compile
.
解决方案
将外部依赖的来源放在自己的项目中,例如:
+- main
+- pom.xml ... <packaging>pom...<module>external...<module>internal
|
+- external
| +- ... Maven dirs as usual ...
| + pom.xml
|
+- internal
+- ... Maven dirs as usual ...
+- pom.xml ... <dependency>external
这样在构建main
Maven Reactor时会处理项目的构建顺序(external
先构建,然后internal
在这种情况下),您可以忘记处理settings.xml
、存储库、配置文件或属性。
推荐阅读
- javascript - 如何在 Ajax 中将 JavaScript 值传递给 PHP
- javascript - express.js req.body 在中间件中未定义
- ios - Swift UICollectionView 没有调用方法 didSelectItemAt
- xaml - XAML - 未设置静态资源
- android - HTML
标签内容在android上调整大小
- arrays - 对象数组中按值和额外过滤器的唯一对象
- material-ui - 如何正确定位 Matrial UI 嵌套道具属性?
- python - 基类中的 `super().__init__()` 的目的是什么?
- javascript - Angular 应用程序中的 Google Chrome“拒绝加载脚本”错误
- ios - 有没有一种代码折叠属性的方法,就像 Xcode 中的函数一样?