Maven 2 反应堆根的Maven变量
在多模块maven项目中,是否存在指向根项目文件夹的变量Maven 2 反应堆根的Maven变量,maven-2,Maven 2,在多模块maven项目中,是否存在指向根项目文件夹的变量 ${project.basedir}指向当前项目的目录 ${project.parent.basedir}指向父项目的目录 但是,是否有一个变量总是指向根目录(执行maven命令的根目录),而不管它来自反应堆中的哪个项目 我意识到我想解决的问题几乎无法解决。我想要一个指向project.basedir、project.parent.basedir、project.parent.parent.basedir等的变量,以较高者为准。但是
指向当前项目的目录${project.basedir}
指向父项目的目录${project.parent.basedir}
我意识到我想解决的问题几乎无法解决。我想要一个指向project.basedir、project.parent.basedir、project.parent.parent.basedir等的变量,以较高者为准。但是,由于项目的父pom不必是文件系统中的父pom,所以我的整个方法都没有帮助。所以我接受帕斯卡的答案,因为它回答了我的问题(即使我的问题不能解决我的问题)。我认为,没有这样的变量。只有一种解决办法,如的公认答案 是否存在始终指向根目录(执行maven命令的根目录)的变量
user.dir
(工作目录)应该是该目录。在Maven 3中,${session.executionRootDirectory}
是“一个始终指向执行Maven命令的…目录的变量。”
请注意,这与提供多模块项目的顶级根目录的属性不同,无论从目录结构中的何处执行mvn
。据我所知,这样的属性并不存在,但您可以使用${basedir}/.
hack来实现它。有关更多详细信息,请参阅
另请参见:可以使用以下方法创建此属性:。 使用插件的
最高basedir
目标,您可以将根路径分配给指定的任何属性。使用
与其他建议不同:
- 此解决方案适用于多模块项目
- 无论是构建整个项目还是构建子模块,它都是有效的
- 无论您是从根文件夹还是从子模块运行maven,它都可以工作(与
${session.executionRootDirectory}
- 无需在每个子模块中设置相对路径属性
<plugin>
<groupId>org.commonjava.maven.plugins</groupId>
<artifactId>directory-maven-plugin</artifactId>
<version>0.1</version>
<executions>
<execution>
<id>directories</id>
<goals>
<goal>directory-of</goal>
</goals>
<phase>initialize</phase>
<configuration>
<property>myproject.basedir</property>
<project>
<groupId>com.my.domain</groupId>
<artifactId>my-root-artifact</artifactId>
</project>
</configuration>
</execution>
</executions>
</plugin>
org.commonjava.maven.plugins
目录maven插件
0.1
目录
目录
初始化
myproject.basedir
com.my.domain
我的根神器
从那时起,
${myproject.basedir}
在任何子模块中,pom始终具有项目根模块的路径。当然,您可以将属性设置为任何模块,而不仅仅是根…对于我来说,在变量插值过程中需要根目录,而不是插件部分-使用手工制作的JAR相对于根的本地目录。我知道这一点使用JAR创建本地目录是一种不好的做法,但这是项目的要求
我无法使用不同解决方案的原因:
和${session.executionRootDirectory}
与执行maven命令的目录绑定。我想引用独立于启动maven的目录的同一目录${user.dir}
如上所述,指向当前项目目录,因此子模块将在错误的位置搜索JAR${project.basedir}
- 我有大约100个项目,所以在我的例子中,定义相对路径或使用接受的问题答案是相当复杂的
- 只能用于插件配置,不能用于变量插值
<repositories>
<repository>
<id>local-maven-repo</id>
<!--NOTE: export PROJECT_ROOT=<location>-->
<url>file:///${env.PROJECT_ROOT}/local-repo</url>
</repository>
</repositories>
本地马文回购
文件://${env.PROJECT_ROOT}/local repo
在最新的maven中,您可以使用${maven.multiModuleProjectDirectory}
但无论如何,令人不安的是,如果我们创建了它,就会有这样的变量:(在Maven 3.6.3 I确定的情况下,如果插件目标配置在子模块pom.xml中,这将引用运行Maven的模块目录。如果在开发中从子模块目录运行,它将不会像人们希望的那样“向上引用”。但是,对于大多数目的来说,这已经足够了。如果.mvn目录(可能是空的)存在于多模块项目的根目录中,这将100%起作用(同样适用于3.6.3)