Maven project.build.directory
Posted
技术标签:
【中文标题】Maven project.build.directory【英文标题】: 【发布时间】:2012-11-01 12:21:56 【问题描述】:在 Maven 中,project.build.directory
指的是什么?我有点迷茫,是引用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 文件即可查看属性。
【讨论】:
我建议使用在线参考而不是归档到 jar 中的文件。这个:maven.apache.org/ref/3.0.3/maven-model/maven.html @khmarbaise 嗯,这也很好,但它没有显示默认值project.build.directory
例如。这就是我想要展示的。
github 镜像允许链接到特定的行号:github.com/apache/maven-3/blob/trunk/maven-model-builder/src/… 否则,它在 svn 中:svn.apache.org/repos/asf/maven/maven-3/trunk/…
@MartinEllis 好的,我也用链接更新了我的答案。谢谢!
我在github.com/apache/maven搜索了maven repo的来源。点击次数相对较少(9)。没有任何东西直接设置该属性。它必须设置在某个地方!这个网址显示了我看到的搜索结果:github.com/apache/maven/…【参考方案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
sourceDirectory
、scriptSourceDirectory
和testSourceDirectory
提供对项目源目录的访问。outputDirectory
和testOutputDirectory
提供对 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
命令并在结果中找到 <build> ... <directory>
标签的值,也就是在有效 pom 中。除非您已覆盖,否则它将显示 Super POM 的值。
【讨论】:
这没有显示一些核心属性,例如project.basedir
。在其他领域,它也不完整。
@ingyhere 没错,有效的pom不包含project.basedir
。实际上,原因是即使超级POM也不包含。有效的 pom 你还想念什么?如果您能提供一些细节,我觉得这很有趣。【参考方案4】:
除了@Verhás István 的回答(我喜欢这个),我期待一个问题的单行:
$project.reporting.outputDirectory
在您的项目中解析为 target/site
。
【讨论】:
以上是关于Maven project.build.directory的主要内容,如果未能解决你的问题,请参考以下文章