Maven 项目的模块设计为 运行 在不同的 JDK

Maven project with modules designed to run on different JDK

我有一个项目,其中一个主模块使用 pom 打包,几个子模块定义为使用 jar 打包。我想让它们中的一些准备好在 JDK7 上 运行,其他的在 JDK8 上准备好(并最终将 JDK7 的那些作为依赖项嵌入到 JDK8 对应项中)。

目标是将子模块作为独立的 jar 发布(例如在 Maven Central 上)

这种做法正确吗?有什么缺点吗?

绝对没有人反对这样做。但是,如果您有一个需要使用 Java 8 编译的模块,您需要确保 Maven 也使用 Java 8.

启动

然后,您需要为每个模块覆盖 maven-compiler-plugin 的配置并定义正确的 Java 版本(<source><target> 属性)。

之后,您可以在 Java 8 项目中使用 Java 7 依赖项而不会出现任何问题。

您可以使用工具链插件:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-toolchains-plugin</artifactId>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>toolchain</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <toolchains>
                    <jdk>
                        <version>${java.min.version}</version>
                        <vendor>oracle</vendor>
                    </jdk>
                </toolchains>
            </configuration>
        </plugin>

您需要有一个工具链文件来配置您要使用的工具链:https://maven.apache.org/plugins/maven-toolchains-plugin/toolchains/jdk.html

还需要在编译插件等中指定java版本