在Java 8上安装和编译Maven工件

时间:2015-03-13 14:53:14

标签: maven java-8 maven-compiler-plugin

我的项目pom.xml具有以下<build>声明:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

当我在这个项目上运行mvn install时,它会编译项目,运行单元测试并将其发布到我的本地仓库。我想在这里学习更多关于Maven的信息,并且很难找到以下文档/解释:

  • 如果POM未在mvn install下声明,我怎么能运行build/pluginsmaven-compiler-plugin是否包含maven-install-plugin,如果是,我怎么能想出来?
  • 最重要的是build/plugins/plugin/configuration/source.../target的值都设置为1.8。如果我的机器上有Java 8,并且我在这个项目上运行mvn install没有任何错误,那么保证项目使用Java 8构建吗?我正在查看docs for the Compiler Plugin,并且看不到任何地方列出的source / target个配置。

1 个答案:

答案 0 :(得分:4)

首先,您应该了解构建生命周期是什么以及它是如何工作的以及插件如何are bound to the life cycle by default

此外,您应该了解在Maven中,每个项目都继承自super pom文件,该文件是maven分发(您下载的软件包)的一部分。 super pom定义了默认的文件夹布局和一些插件版本。

像你一样定义maven-compiler-plugin的问题是非常准确,只是错误。您应该像下面这样定义它:

<build>
  <pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
  </pluginManagement>
</build>

这将覆盖超级pom继承的定义并更改其配置。在你的情况下,我建议将定义改为:

  <project>
    ...
    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
      <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
      </pluginManagement>
    </build>
    ..
  </project>

应该全局设置编码,因为有其他插件使用此定义,如maven-resources-plugin。上述属性的使用简化了这一点,因为每个具有编码选项的插件都将使用default as defined in the property

为确保使用正确版本的Java(您计算机上的JDK),您必须使用maven-enforcer-plugin

除此之外,请查看plugins page which shows the most up-to-date releases of the plugins

作为一份好的文档,我可以推荐Books on Maven,但要注意它们是用Maven 2编写的。因此,如果有什么不明确的问题,请在此处询问用户邮件列表。