在多模块maven项目中,是否有一个指向根项目文件夹的变量?
${project.basedir}
指向当前项目的目录,${project.parent.basedir}
指向父项目的目录, 但是有一个变量总是指向根目录(执行maven命令的目录),无论反应堆内的哪个项目?
我意识到我想要解决的问题几乎无法解决.我想要一个指向project.basedir,project.parent.basedir,project.parent.parent.basedir等的变量,以较高者为准.但是由于项目的父pom不一定是文件系统中的父项,我的整个方法都无济于事.所以我接受Pascal的答案,因为它回答了我的问题(即使我的问题没有解决我的问题).
ctr*_*den 21
在Maven 3中," ${session.executionRootDirectory}
是一个始终指向...目录...的变量,执行maven命令."
请注意,这与提供多模块项目的顶级根目录的属性不同,无论目录结构在何处mvn
执行.据我所知,这样的属性并不存在,但你可以使用${basedir}/..
hack来实现它.有关详细信息,请参阅maven-users上的此主题.
Mat*_*fek 16
在最新的maven中,您可以使用${maven.multiModuleProjectDirectory}
.
小智 7
使用directory-maven-plugin 和 directory-of 目标。
与其他建议不同:
${session.executionRootDirectory}
该插件允许您将您选择的属性设置为任何项目模块的绝对路径。就我而言,我将其设置为根模块...在我的项目根 pom 中:
<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>
Run Code Online (Sandbox Code Playgroud)
从此以后,${myproject.basedir}
在任何子模块中,pom 总是有项目根模块的路径。当然,您可以将属性设置为任何模块,而不仅仅是根...
对我来说,在变量插值期间需要根目录,而不是插件部分 - 相对于带有手工制作的 jar 的根目录的本地目录。我知道在本地目录中放置 jar 是一种不好的做法,但这是项目的要求。
为什么我无法使用不同的解决方案:
${session.executionRootDirectory}
并${user.dir}
与执行 maven 命令的目录绑定。我想独立于启动 maven 的目录来引用同一目录。${project.basedir}
如上所述,指向当前项目目录,因此子模块将在错误的位置搜索 jar。因此,在我的需求不好的情况下,我使用了引用项目根的环境变量并在 pom.xml 中使用了它。当其他解决方案不起作用时,将其作为最后的手段。这是我在案例中如何使用环境变量的示例:
<repositories>
<repository>
<id>local-maven-repo</id>
<!--NOTE: export PROJECT_ROOT=<location>-->
<url>file:///${env.PROJECT_ROOT}/local-repo</url>
</repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
33970 次 |
最近记录: |