197

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

4

4 回答 4

254

你可以在超级 pom.xml 中找到那些 maven 属性。

你在这里找到罐子:

${M2_HOME}/lib/maven-model-builder-3.0.3.jar

使用 7-zip 或其他存档器(或使用 jar 工具)打开 jar。

导航

org/apache/maven/model

在那里你会找到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>

更新

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

于 2012-11-13T06:24:29.317 回答
56

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

https://web.archive.org/web/20150527103929/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

sourceDirectory, scriptSourceDirectory, 并testSourceDirectory提供对项目源目录的访问。outputDirectorytestOutputDirectory提供对 Maven 将放置字节码或其他构建输出的目录的访问权限。directory指包含所有这些输出目录的目录。

于 2012-11-13T01:53:15.567 回答
5

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

mvn3 help:effective-pom

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

于 2017-11-14T18:52:33.840 回答
1

除了@Verhás István 的回答(我喜欢这个),我还期待这个问题的单句:

${project.reporting.outputDirectory}target/site在您的项目中解析为。

于 2020-09-22T12:55:13.407 回答