现在,我正在编写一个小型java应用程序,只有几个maven pom.xml文件。我想用jdk 1.6编译我所有的maven包,如果没有在每个POM上手动设置它,我找不到一个好的方法 - 我厌倦了复制和粘贴
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
在我生成的每个pom.xml文件中。
有没有更简单的方法来解决此问题?
答案 0 :(得分:16)
创建一个仅限pom(<packaging>pom</packaging>
)项目,该项目具有所需的编译器设置(以及任何其他默认设置)。您可以像对待任何其他项目一样对待它(释放它;将它部署到您的Maven仓库等)。
在您的pom文件顶部放置parent
声明:
<parent>
<groupId><!-- parent's group id --></groupId>
<artifactId><!-- parent's artifact id --></artifactId>
<version><!-- parent's version --></version>
</parent>
如果你想要设置的只是编译器设置,它没有多大帮助。但是,如果您发现自己在项目中以相同的方式配置了大量插件,报告和依赖项,则可以创建一个父项来统治它们。
BTW - 在父pom文件中声明dependencies
和plugins
时要小心。通常,您需要支持dependencyManagement
和pluginManagement
。有关详细信息,请参阅the documentation。
答案 1 :(得分:8)
您可以在~/.m2/settings.xml
中指定此插件和配置,然后将其应用于所有项目。
然而,这有使您的项目不再可移植的缺点 - 尝试使用相同的pom.xml构建相同的代码将在与您没有相同settings.xml
值的其他计算机上失败。 / p>
答案 2 :(得分:5)
我厌倦了复制和粘贴
是的,您应该使用POM inheritance来避免这种情况,并在父POM中配置 maven-compiler-plugin
。
另一种选择是使用@matt建议的解决方案(并且他确定了使用settings.xml
)的利弊。
在这两种情况下,这通常都是我想要使用您要配置的maven-enforcer-plugin
及其requireJavaVersion
规则进行检查的设置:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-versions</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireJavaVersion>
<version>1.6</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>
但它可以做得更多(比如检查maven版本)。非常有用。
答案 3 :(得分:3)
我想用jdk 1.6
编译我的所有maven包
如果这是多模块项目,只需将这些设置放在pluginManagement
下的顶级POM中。
如果您有许多独立项目,只需复制并粘贴此配置即可。谨防“智能”解决方案,例如在全球范围内设置这个。有一天,你会想要为你的一个或两个项目使用不同的编译器设置,噩梦就会开始: - )
记住...
让事情尽可能简单,但不简单。