【问题标题】:Maven compiler:compile goal plugin lack of specification?Maven 编译器:编译目标插件缺乏规范?
【发布时间】:2016-08-05 04:45:58
【问题描述】:

在 Maven super-pom.xml 中定义 (4.0.0)
在构建部分定义了一些配置参数,
如:

<build> 
    <directory>${project.basedir}/target</directory>
    <outputDirectory>${project.build.directory}/classes</outputDirectory> <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>
...
<build>

现在我们举个例子:&lt;outputDirectory&gt;${project.build.directory}/classes&lt;/outputDirectory&gt;

resources:resources 插件目标使用它, 如文档中所述:

名称类型自描述输出目录文件 - 输出
要将资源复制到的目录。默认值为: ${project.build.outputDirectory}。

compiler:compile 插件目标也使用它(我猜),
但该插件的文档中没有定义它。 这是为什么 ?是缺少规范还是什么?
我错过了什么吗?

【问题讨论】:

  • 我不明白,请您发布一个详细说明您的观点的答案,这将非常有帮助,谢谢。
  • 我的意思是您可以回答详细说明您之前的评论,例如“在构建时可以生成源”是什么意思?我肯定错过了什么......
  • 另外“maven-compiler-plugin 将编译 buildpath 中的所有 Java 源代码。”,buildpath 是什么意思?

标签: java maven plugins pom.xml


【解决方案1】:

maven-compiler-plugin 的目标是编译源目录下的所有 Java 文件,即on the buildpath。确实,默认情况下,src/main/java 是一个源目录。但是,可以有许多其他源目录。

  • 您可以在 Maven 构建过程中使用 build-helper-maven-plugin:add-source 目标即时添加源目录。
  • Maven 插件可以自己生成 Java 源代码。编译器插件的FAQ 甚至提到了这种情况。并且有很多插件可以生成 Java 源代码,基于 XSD、WSDL、数据库模式、自定义模型……Maven 本身使用Modello,这是一个从模型生成 Java 代码的工具。

所有这些选项都围绕着同一个想法:将 Java 源代码添加到构建路径中。所有这些源代码都需要由编译器插件编译。

真的,maven-compiler-plugin 唯一关心的是:编译构建路径下的内容。我的猜测是,这就是为什么插件的文档是这样的原因。 compile 目标具有独特的文档:

编译应用程序源代码

这有点道理:没有太多要说明的地方,因为这些来源可以有多种来源,因此文档保持通用。它只指定它需要什么:编译构建路径下的内容。


我要补充一点,这并不特定于编译器插件。正如您在问题中所说,这也涉及maven-resources-plugin。之前在此答案中所说的所有内容也适用于资源插件:

  • 您可以在构建期间使用build-helper-maven-plugin:add-resource 目标添加资源目录。
  • Maven 插件还可以在构建期间生成资源(例如,由 Java 注释类生成的 WSDL)。

您会注意到resources 目标的文档是:

将主源代码的资源复制到主输出目录。

它没有指定src/main/resources 是默认资源目录,原因肯定与编译器插件没有指定。

但是,正如您在问题中所说,it does document 清楚地知道这些资源的放置位置。但这是因为无论这些资源的来源(src/main/resources,生成...),它们都将始终放在此输出目录下。

【讨论】:

    猜你喜欢
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多