代码之家  ›  专栏  ›  技术社区  ›  Sean Patrick Floyd

反应堆根部的Maven变量

  •  45
  • Sean Patrick Floyd  · 技术社区  · 14 年前

    在多模块maven项目中,是否有指向根项目文件夹的变量?

    • ${project.basedir}
    • ${project.parent.basedir} 指向父项目的目录,


    我意识到我想解决的问题几乎是无法解决的。我想要一个指向project.basedir、project.parent.basedir、project.parent.parent.basedir等的变量,以较高者为准。但是,由于项目的父pom不必是文件系统中的父pom,所以我的整个方法没有帮助。所以我接受帕斯卡的回答,因为它回答了我的问题(即使我的问题不能解决我的问题)。

    7 回复  |  直到 14 年前
        1
  •  42
  •   Pascal Thivent    14 年前

    是否有一个变量总是指向根目录(执行maven命令的目录)

    user.dir (工作目录)应该是那个目录。

        2
  •  21
  •   Community CDub    7 年前

    ${session.executionRootDirectory} 是“一个总是指向。。。目录。。。从中执行maven命令。”

    请注意,这与提供多模块项目的顶级根目录的属性不同,无论目录结构在哪里 mvn ${basedir}/.. 黑客来实现它。见 this thread on maven-users 更多细节。

    另见: Finding the root directory of a multi module maven reactor project

        3
  •  16
  •   Alex Shesterov    6 年前

    ${maven.multiModuleProjectDirectory} .

        4
  •  4
  •   sparkyd    8 年前

    使用 directory-maven-plugin with directory-of goal

    与其他建议不同:

    • 此解决方案适用于多模块项目。
    • 无论是构建整个项目还是子模块
    • 不需要在每个子模块中设置相对路径属性!

    该插件允许您将自己选择的属性设置为项目任何模块的绝对路径。在我的例子中,我将它设置为根模块。。。 在我的项目根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>
    

        5
  •  3
  •   Andrejs    11 年前

    可以使用以下方法创建此类属性: directory-maven-plugin . 使用插件的 highest-basedir

        6
  •  2
  •   Community CDub    7 年前

    我认为,没有这样的变数。只有在公认的答案中 Maven2 property that indicates the parent directory .

        7
  •  2
  •   Community CDub    7 年前

    变量插值

    为什么我不能使用不同的解决方案:

    • ${session.executionRootDirectory} ${user.dir}
    • ${project.basedir} ,如上所述,指向当前项目目录,因此子模块将在错误的位置搜索jar。
    • 我有大约100个项目,所以定义了相对路径或公认答案的用法 this
    • Directory plugin 只能用于插件配置,不能用于变量插值

    所以,在我的情况下,我使用了 环境变量

    <repositories>
        <repository>
            <id>local-maven-repo</id>
            <!--NOTE: export PROJECT_ROOT=<location>-->
            <url>file:///${env.PROJECT_ROOT}/local-repo</url>
        </repository>
    </repositories>