【问题标题】:Maven project.build.directoryMaven project.build.directory
【发布时间】:2023-03-24 06:19:01
【问题描述】:

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

【问题讨论】:

  • 歧义本不应该成为主流!

标签: maven


【解决方案1】:

你可以在超级 pom 中找到那些 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>

更新

经过一些游说后,我添加了link to the pom-4.0.0.xml。这使您无需打开本地 jar 文件即可查看属性。

【讨论】:

【解决方案2】:

它指向您的顶级输出目录(默认为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

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

【讨论】:

  • codehause.org 托管已终止,此链接不再有效。
  • 是的,真实而可悲。我已经更新了一个工作链接并引用了链接页面的相关部分。
  • ...所以project.base.dir指向pom.xml所在项目的根目录。这就是为什么之后,Maven 定义的project.build.directory${project.basedir}/target。谢谢大家,我不知道这个。
  • 虽然看起来是真的,但是你是怎么得到这个信息的:“project.base.dir 指向 pom.xml 所在项目的根目录”。在哪里可以看到这个定义?
  • 假设你的项目叫project-A,在project-A下声明了一个pom.xml,那么${project.build.sourceDirectory}指向project-A/src/main/java${project.build.scriptSourceDirectory}指向project-A/src/main/scripts,@ 987654338@指向project-A/src/test/java${project.build.directory}指向project-A/target${project.build.directory}指向project-A/target/classes${project.build.testOutputDirectory}指向project-A/target/test-classes
【解决方案3】:

您只需执行

即可找到项目中价值的最新答案
mvn3 help:effective-pom

命令并在结果中找到 &lt;build&gt; ... &lt;directory&gt; 标签的值,也就是在有效 pom 中。除非您已覆盖,否则它将显示 Super POM 的值。

【讨论】:

  • 这没有显示一些核心属性,例如project.basedir。在其他领域,它也不完整。
  • @ingyhere 没错,有效的pom不包含project.basedir。实际上,原因是即使超级POM也不包含。有效的 pom 你还想念什么?如果您能提供一些细节,我觉得这很有趣。
【解决方案4】:

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

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

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多