【发布时间】:2016-05-14 14:14:40
【问题描述】:
我的应用程序在 Java 1.6u45 和 Java 1.8 用户之间拆分。我们的问题是我们不能同时指定项目系统库和代码有两种不同的编译器设置。
项目结构:
Project >
> src/main/java/com/us/javafx/... (Java 8 code)
> src/main/java/com/us/... (Java 6 code)
> src/main/resources/...
我们的 POM.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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.us</groupId>
<artifactId>PROJECT</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>PROJECT</name>
<description>DESCR</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
</dependencies>
<build>
<plugins>
<!-- Copy all dependencies to jars directory -->
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/jars</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!-- Maven Compiler -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<!-- Necessary to avoid setting JRE on Maven project update! -->
<!-- SEE PHOTO FOR WHY THIS IS HERE -->
<source>1.8</source>
<target>1.8</target>
</configuration>
<executions>
<!-- Compile Java 6 directory -->
<execution>
<id>java6</id>
<configuration>
<excludes>
<exclude>com/us/javafx/**/*</exclude>
</excludes>
<!-- Non working attempt to set compiler version -->
<source>1.6</source>
<target>1.6</target>
</configuration>
</execution>
<!-- Compile Java 8 directory -->
<execution>
<id>java8</id>
<configuration>
<includes>
<include>com/us/javafx/**/*</include>
</includes>
<!-- Non working attempt to set compiler version -->
<source>1.8</source>
<target>1.8</target>
</configuration>
</execution>
</executions>
</plugin>
<!-- Create JAR in jars folder -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<outputDirectory>${project.build.directory}/jars</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
如果我们告诉 Maven 编译器插件使用 Java 1.8,Java 1.6 用户会收到不受支持的主要次要版本错误。或者我们告诉 Maven 编译器插件使用 Java 1.6,但是我们的 Java 8 代码在执行 Right Click Project > Maven > Update Project... 时会报错(这会导致下面的屏幕截图):
有没有一种方法可以同时实现:
1) 使用各自的编译器编译 Java 6 和 8 代码
2) 选择 Java 8 作为我们项目的 JRE 系统库
【问题讨论】:
-
您只能从中创建两个单独的 maven 项目,为项目中的 maven-compiler 进行适当的配置,并通过父级组合它们(这称为多模块构建)。除此之外,在任何不能正常工作的 IDE 中......只有单独的项目才能工作。
-
您可以尝试使用配置文件并运行构建两次,每个配置文件一次。也许不是最优雅的。假设有足够的可用节点,Go 等现代 CI 应该允许您并行运行构建。
-
感谢您的帮助!现在我只是在进行生产构建时添加 JVM 参数: mvn clean package -Dmaven.compiler.source=1.6 -Dmaven.compiler.target=1.6 并将我的 POM.xml 保持在适合我的 IDE 的配置中
-
正如 khmarbaise 评论的那样,唯一的方法是将 1.6 和 1.8 代码库分别拆分到自己的单独项目中。
标签: java eclipse maven javafx maven-compiler-plugin