现在,我正在自己编写一个小型java应用程序,只有很少的maven pom.xml文件。我想让我的所有 maven 包都使用 jdk 1.6 进行编译,如果不在每个 POM 上手动设置它,我找不到一个好的方法来做到这一点 - 我厌倦了复制和粘贴
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
在我生成的每个 pom.xml 文件中。
有没有更简单的方法来解决这个问题?
创建一个仅包含 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>
如果您只想设置编译器设置,则没有多大帮助。 但是,如果您发现自己在整个项目中以相同的方式配置了大量插件、报告和依赖项,则可以创建一个父级来管理所有这些。
顺便说一句 - 在父 pom 文件中声明
dependencies
和 plugins
时要小心。 通常您会喜欢 dependencyManagement
和 pluginManagement
。 请参阅文档了解更多详细信息。
您可以在
~/.m2/settings.xml
中指定此插件和配置,然后将其应用到所有项目。
但是,这有一个缺点,即使您的项目不再可移植 - 尝试使用相同的 pom.xml 构建相同的代码将在不具有与您相同的
settings.xml
值的其他计算机上失败。
我厌倦了复制粘贴
是的,您应该使用 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 版本)。非常有用。
我想让我所有的maven包都用jdk 1.6编译
如果这是多模块项目,只需将这些设置放入
pluginManagement
下的顶级 POM 中。
如果您有许多独立项目,只需复制并粘贴此配置即可。谨防“智能”解决方案,例如将其设置在全球某个地方。有一天,您会想要对一两个项目使用不同的编译器设置,噩梦就会开始:-)
记住...
让事情尽可能简单,但不能再简单了。