Maven编译器:编译目标插件缺乏规范?

时间:2016-04-13 20:55:24

标签: java maven plugins pom.xml

在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>

现在让我们举个例子:<outputDirectory>${project.build.directory}/classes</outputDirectory>

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

  

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

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

1 个答案:

答案 0 :(得分:0)

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,生成...),所有这些资源都将永远放在这个输出目录下。