默认 Maven 编译器设置

问题描述 投票:0回答:4

现在,我正在自己编写一个小型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 文件中。

有没有更简单的方法来解决这个问题?

java maven
4个回答
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>

如果您只想设置编译器设置,则没有多大帮助。 但是,如果您发现自己在整个项目中以相同的方式配置了大量插件、报告和依赖项,则可以创建一个父级来管理所有这些。

顺便说一句 - 在父 pom 文件中声明

dependencies
plugins
时要小心。 通常您会喜欢
dependencyManagement
pluginManagement
。 请参阅文档了解更多详细信息。


9
投票

您可以在

~/.m2/settings.xml
中指定此插件和配置,然后将其应用到所有项目。

但是,这有一个缺点,即使您的项目不再可移植 - 尝试使用相同的 pom.xml 构建相同的代码将在不具有与您相同的

settings.xml
值的其他计算机上失败。


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 版本)。非常有用。


4
投票

我想让我所有的maven包都用jdk 1.6编译

如果这是多模块项目,只需将这些设置放入

pluginManagement
下的顶级 POM 中。

如果您有许多独立项目,只需复制并粘贴此配置即可。谨防“智能”解决方案,例如将其设置在全球某个地方。有一天,您会想要对一两个项目使用不同的编译器设置,噩梦就会开始:-)

记住...

让事情尽可能简单,但不能再简单了

© www.soinside.com 2019 - 2024. All rights reserved.