默认的maven编译器设置

时间:2010-03-28 02:06:55

标签: java compiler-construction maven

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

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

4 个答案:

答案 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文件中声明dependenciesplugins时要小心。通常,您需要支持dependencyManagementpluginManagement。有关详细信息,请参阅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中。

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

记住...

  

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