Maven project.build.directory

fai*_*lai 166 maven

在Maven中,project.build.directory引用了什么?我有点困惑,是否引用了Maven项目中的源代码目录或目标目录?

mab*_*aba 218

您可以在超级pom中找到那些maven属性.

你在这里找到了罐子:

${M2_HOME}/lib/maven-model-builder-3.0.3.jar
Run Code Online (Sandbox Code Playgroud)

用7-zip或其他一些存档器(或使用jar工具)打开罐子.

导航

org/apache/maven/model
Run Code Online (Sandbox Code Playgroud)

在那里你会找到pom-4.0.0.xml.

它包含所有那些"捷径":

<project>
    ...
    <build>
        <directory>${project.basedir}/target</directory>
        <outputDirectory>${project.build.directory}/classes</outputDirectory>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
        <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
        <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
        <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
        <resources>
            <resource>
                <directory>${project.basedir}/src/main/resources</directory>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>${project.basedir}/src/test/resources</directory>
            </testResource>
        </testResources>
        ...
    </build>
    ...
</project>
Run Code Online (Sandbox Code Playgroud)

更新

经过一番游说,我正在添加链接pom-4.0.0.xml.这允许您在不打开本地jar文件的情况下查看属性.

  • @khmarbaise那也不错,但它并没有向你展示`project.build.directory`的默认值.这就是我想表现出来的. (15认同)

sdo*_*ass 40

它指向您的顶级输出目录(默认情况下为"target"):

http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide

编辑:正如已经指出的那样,Codehaus现在已经不幸失败了.您可以在这里找到Sonatype的这些属性的详细信息:

http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-properties.html#resource-filtering-sect-project-properties

如果您曾尝试在Maven中引用输出目录,则不应使用像target/classes这样的文字值.相反,您应该使用属性引用来引用这些目录.

    project.build.sourceDirectory
    project.build.scriptSourceDirectory
    project.build.testSourceDirectory
    project.build.outputDirectory
    project.build.testOutputDirectory
    project.build.directory
Run Code Online (Sandbox Code Playgroud)

sourceDirectory,scriptSourceDirectory和testSourceDirectory提供对项目源目录的访问.outputDirectory和testOutputDirectory提供对Maven将放置字节码或其他构建输出的目录的访问.directory指的是包​​含所有这些输出目录的目录.

  • ...所以`project.base.dir`指向pom.xml所在项目的根目录.这就是为什么在那之后,Maven定义的`project.build.directory`是`$ {project.basedir}/target`.谢谢你们,我不知道这个. (7认同)
  • 假设你的项目名为project-A,在project-A下声明了一个pom.xml,那么`${project.build.sourceDirectory}`指向`project-A/src/main/java`,`${ project.build.scriptSourceDirectory}` 指向 `project-A/src/main/scripts`,`${project.build.testSourceDirectory}` 指向 `project-A/src/test/java`,`${project. build.directory}` 指向`project-A/target`,`${project.build.directory}` 指向`project-A/target/classes`,`${project.build.testOutputDirectory}` 指向`项目-A/目标/测试类`。 (3认同)

小智 5

您可以找到项目中价值的最新答案,只需执行

mvn3 help:effective-pom
Run Code Online (Sandbox Code Playgroud)

命令并<build> ... <directory>在结果中找到标签的值,也就是在 Effective-pom 中。除非您已覆盖,否则它将显示 Super POM 的值。