根据https://maven.apache.org/pom.html#properties,应该可以使用${settings.x}
从pom.xml文件中的settings.xml文件访问元素<settings><x>value</x></settings>
。
然而,当我尝试像
<profiles>
<profile>
<activation>
<file>
<exists>${settings.localRepository}/path/to/file</exists>
</file>
</activation>
</profile>
</profiles>
在我的pom.xml中,它不会在有效的pom.xml中被替换。当我用${user.home}/.m2/repository
代替${settings.localRepository}
时,它工作得很好,但这不是我想要的。有什么我能做的吗?(使用Apache Maven 3.6.0测试)
背景信息:我有一个依赖项,它不存在于在线maven存储库中,我无法更改它。它必须由用户编译,并且可以安装到本地存储库中。我尝试在pom.xml中自动执行此操作,而不是手动执行此操作。为此,我必须忽略本地存储库中不存在的依赖项。因此,配置文件将检查该文件是否存在于本地存储库中。如果没有概要文件,maven甚至不会启动生命周期,因为无法解决依赖关系。当然,项目不会在第一次执行pom.xml时编译。但是,所有依赖项都将自动安装,并且项目将在第二次编译中进行编译。我知道这不是一个干净的解决方案,但我认为这比告诉用户在编译这个项目之前手动编译和安装依赖项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反应器负责项目的构建顺序(首先构建external
,然后在这种情况下构建internal
),您可以忘记处理settings.xml
,存储库,配置文件或属性。