【问题标题】:default maven compiler setting默认 Maven 编译器设置
【发布时间】:2010-03-28 02:06:54
【问题描述】:

现在,我正在自己编写一个小型 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 compiler-construction maven


    【解决方案1】:

    创建具有所需编译器设置(和任何其他默认设置)的仅 pom (&lt;packaging&gt;pom&lt;/packaging&gt;) 项目。您可以像对待任何其他项目一样对待它(发布它;将其部署到您的 Maven 存储库等)。

    在您的 pom 文件顶部放置 parent 声明:

    <parent>
      <groupId><!-- parent's group id --></groupId>
      <artifactId><!-- parent's artifact id --></artifactId>
      <version><!-- parent's version --></version>
    </parent>
    

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

    顺便说一句 - 在你的父 pom 文件中声明 dependenciesplugins 时要小心。通常你会喜欢dependencyManagementpluginManagement。详情请见thedocumentation

    【讨论】:

    • 到目前为止,我能找到唯一的解决方案来解决恼人的 eclipse m2e 行为。即使在这篇文章发布 5 年后。可能是我在日食(火星)中遗漏了一些东西吗?
    【解决方案2】:

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

    但是,这样做的缺点是使您的项目不再可移植 - 尝试使用相同的 pom.xml 构建相同的代码将在与您没有相同 settings.xml 值的其他机器上失败。

    【讨论】:

    • settings.xml 的 maven 参考没有显示配置插件的方法 (maven.apache.org/settings.html)。我错过了什么吗?此外,我在 settings.xml 文件中已经有一些条目(例如“project.build.sourceEncoding”属性和其他非标准存储库,因此向 settings.xml 添加更多内容对我来说不是问题。
    • 您可以设置一个配置文件(默认为活动),其中 javac 插件具有此值。它未在该设置页面上列出或提及,但受支持。请参阅 m2_home/conf/settings.xml 下的全局设置以供参考(您也可以在此处指定设置)
    【解决方案3】:

    我厌倦了复制和粘贴

    是的,您应该使用 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 中。

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

      记住...

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-28
        • 1970-01-01
        • 2017-12-01
        • 1970-01-01
        • 2012-07-15
        • 2019-11-08
        相关资源
        最近更新 更多