从项目对象模型变量引用资源目录

cha*_*had 53 maven

如果我可以${project.build.sourceDirectory}用来引用源目录,我可以用什么来引用"resources"目录?

看着超级pom,看起来${project.build.resources.resource.directory}会起作用,但事实并非如此...

cth*_*aud 50

${project.build.resources[0].directory}
Run Code Online (Sandbox Code Playgroud)

maven reference @ Sonatype,"资源过滤"一章说,可以访问maven内部"Model.class"中的任何内容.报价:

" 有关Maven Model对象上可用属性的完整列表,请查看maven-model项目的JavaDoc http://maven.apache.org/ref/3.0.4/maven-model/apidocs/index .html.加载这个JavaDoc之后,看一下Model类.从这个Model类JavaDoc中,你应该可以导航到你想要引用的POM属性. "

然后,maven帮助插件有一个方便的帮助:评估目标,让你做试验和错误发现属性.

  • 不确定使用"[0]"是一个好主意,如果由于某种原因订单改变,曾经为你工作过,将不再有效. (13认同)
  • 这不适用于antrun插件,也可能适用于其他插件 (4认同)
  • 这在[maven-assembly-plugin](https://maven.apache.org/plugins/maven-assembly-plugin/)描述符中的<fileSet />元素内不起作用. (4认同)

Mic*_*ael 37

这里:

directory:此元素的值定义资源的位置.构建的默认目录是${basedir}/src/main/resources.

编辑:为清楚起见

  • [这本书](https://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-properties.html) 说:“如果你曾经尝试在 Maven 中引用输出目录,你永远不应该使用像“目标/类”这样的字面值。” 可能是因为@MarkMcLaren 提到的原因。 (2认同)

pet*_*ica 5

使用 Maven 帮助插件扩展 @chiebaud 的答案,我认为今天正确的选项是

${project.resources[0].directory}
Run Code Online (Sandbox Code Playgroud)

(没有“ .build”部分)。