eclipse 父 pom 中的 maven-compiler-plugin

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/37350273/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 23:10:51  来源:igfitidea点击:

maven-compiler-plugin in parent pom

javaeclipsemavenmaven-pluginmaven-compiler-plugin

提问by Johnyzhub

I am facing issue in setting java compiler version for the parent-child pom files. I added maven-compiler-plugin in child pom with version 1.7 and noticed that the java version changed from default 1.5 to 1.7 for child module and the parent project is still with 1.5. Then, I moved the compiler plugin from child pom to parent pom. Expected that the compiler version will be changed to 1.7 for both parent and child maven modules. But strangely no changes observed, the child module is still with 1.7 and the parent project is 1.5. I performed 'maven- > update project' from eclipse IDE. but no use. FYI : Building the parent-child projects is working fine with no issues. Any help? Here are my parent and child POMs

我在为父子 pom 文件设置 java 编译器版本时遇到问题。我在 1.7 版本的子 pom 中添加了 maven-compiler-plugin,并注意到子模块的 java 版本从默认 1.5 更改为 1.7,而父项目仍然使用 1.5。然后,我将编译器插件从子 pom 移动到父 pom。预计父和子 maven 模块的编译器版本将更改为 1.7。但奇怪的是没有观察到任何变化,子模块仍然是 1.7 而父项目是 1.5。我从 Eclipse IDE 执行了“maven-> 更新项目”。但没有用。仅供参考:构建亲子项目运行良好,没有任何问题。有什么帮助吗?这是我的父级和子级 POM



PARENT POM

父 POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mymaven.parentpom.example</groupId>
    <artifactId>ParentPOMProj</artifactId>
    <packaging>pom</packaging>
    <version>0.0.1-SNAPSHOT</version>

    <name>ParentPOMProj</name>
    <url>http://maven.apache.org</url>

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

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>ParentPOMProj</finalName>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5.1</version>
                    <configuration>
                        <compilerVersion>1.7</compilerVersion>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>


    <modules>
        <module>ModuleOne</module>
    </modules>
</project>



CHILD POM

儿童POM

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>


    <parent>
        <groupId>com.mymaven.parentpom.example</groupId>
        <artifactId>ParentPOMProj</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.mymaven.parentpom.example.module</groupId>
    <artifactId>ModuleOne</artifactId>
    <version>0.0.2-SNAPSHOT</version>
    <name>ModuleOne</name>
    <url>http://maven.apache.org</url>


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

    <build>
        <finalName>ModuleOne</finalName>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

-----------------------------------------------------

-------------------------------------------------- ---

IDE Image

IDE 图像

采纳答案by Johnyzhub

After researching further, I understood that the java version in maven-compiler-plugin in parent pom applies to the child POMs but not to the parent itself. Basically, most of the time, it is not recommend to keep any source code in parent project, it is barely to handle all the build configuration for the child modules. Here are the updated POMS :

经过进一步研究,我了解到父 pom 中 maven-compiler-plugin 中的 java 版本适用于子 POM,但不适用于父本身。基本上,大多数时候,不建议在父项目中保留任何源代码,它几乎不需要处理子模块的所有构建配置。这是更新的 POMS :



PARENT POM

父 POM

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

<groupId>com.mymaven.parentpom.example</groupId>
<artifactId>ParentPOMProj</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>

<name>ParentPOMProj</name>
<url>http://maven.apache.org</url>

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

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <finalName>ParentPOMProj</finalName>

    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>


<modules>
    <module>ModuleOne</module>
</modules>



CHILD POM

儿童POM

http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4.0.0

http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. w3.org/2001/XMLSchema-instance"> 4.0.0

<parent>
    <groupId>com.mymaven.parentpom.example</groupId>
    <artifactId>ParentPOMProj</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<groupId>com.mymaven.parentpom.example.module</groupId>
<artifactId>ModuleOne</artifactId>
<packaging>jar</packaging>
<version>0.0.2-SNAPSHOT</version>
<name>ModuleOne</name>
<url>http://maven.apache.org</url>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

enter image description here

在此处输入图片说明

回答by Alan Hay

In the parent you need to define it in <pluginManagement/>rather than <plugins/>

在父级中,您需要定义它<pluginManagement/>而不是<plugins/>

https://maven.apache.org/pom.html#Plugin_Management

https://maven.apache.org/pom.html#Plugin_Management

pluginManagement: is an element that is seen along side plugins. Plugin Management contains plugin elements in much the same way, except that rather than configuring plugin information for this particular project build, it is intended to configure project builds that inherit from this one

pluginManagement:是一个与插件一起看到的元素。插件管理以几乎相同的方式包含插件元素,除了不是为此特定项目构建配置插件信息,而是旨在配置从该项目构建继承的项目构建

<build>
    <finalName>ParentPOMProj</finalName>

    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

As mentioned in the docs, the child project also needs to reference the plugin:

如文档中所述,子项目还需要引用插件

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <!-- inherits config from parent: can override if required -->
        </plugin>
    </plugins>
</build>

回答by kornisb

You should check the compliance of the project. Right click on the project in the Project Explorer of Eclipse, then go to Properties, and set it as shown on the picture (you can also set it to version 1.7 if the proper JDK is installed):

您应该检查项目的合规性。在Eclipse的Project Explorer中右击项目,然后进入Properties,如图设置(如果安装了合适的JDK,也可以设置为1.7版本):

enter image description here

在此处输入图片说明