我的应用程序在Java 1.6u45和Java 1.8的用户之间分开。我们的问题是我们不能指定项目系统库,并且同时为代码提供两种不同的编译器设置。Maven使用不同的JDK版本编译
项目结构:
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代码会抱怨错误表演时右键点击项目>的Maven>更新项目...(这会导致下面的屏幕截图):
有没有一种方法可以达到既:
1)编译Java 6和8的代码与各自的编译器
2)选择Java 8我们项目的JRE系统库
您只能从它制作两个单独的Maven项目,为项目中的Maven编译器进行相应的配置,并通过父项(这称为多模块构建)进行组合。除此之外,任何IDE都无法正常工作..只有分开的项目才能工作。 – khmarbaise
您可以尝试使用配置文件并运行构建两次,每个配置文件一次。也许不是最优雅的。像Go这样的现代CI应该允许您在假设有足够节点的情况下并行运行构建。 – Gavin
我很感激帮助! 现在我只是将JVM中的说法,当我做生产版本: MVN清洁套装-Dmaven.compiler.source = 1.6 -Dmaven.compiler.target = 1.6 和保持我的pom.xml在配置适合我的IDE –