Maven project.build.directory

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

266202 次浏览

它指向你的顶级输出目录(默认为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中引用输出目录,你永远不应该使用像目标/类这样的文字值。相反,您应该使用属性引用来引用这些目录。

    project.build.sourceDirectory
project.build.scriptSourceDirectory
project.build.testSourceDirectory
project.build.outputDirectory
project.build.testOutputDirectory
project.build.directory

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

您可以在super 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>

更新

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

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

mvn3 help:effective-pom

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

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

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