不同JDK版本的Maven编译

2024-01-10

我的应用程序分为使用 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 代码在执行右键单击项目 > Maven > 更新项目...时会抱怨错误(这会导致下面的屏幕截图):

有没有一种方法可以实现这两个目标:

1)用各自的编译器编译Java 6和8代码

2)选择Java 8作为我们项目的JRE系统库


我最近了解了toolchains.xml。 Maven 甚至对其进行了记录并从 2.0.9 开始支持它!看工具链文档 https://maven.apache.org/guides/mini/guide-using-toolchains.html

因此,我在 ~/.m2/ 文件夹中添加了一个 toolchain.xml 文件,其中包含以下内容:

<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
 <!-- JDK toolchains -->
 <toolchain>
   <type>jdk</type>
   <provides>
     <version>1.8</version>
     <vendor>sun</vendor>
   </provides>
   <configuration>
     <jdkHome>/opt/java8</jdkHome>
   </configuration>
 </toolchain>
 <toolchain>
   <type>jdk</type>
   <provides>
     <version>1.7</version>
     <vendor>sun</vendor>
   </provides>
   <configuration>
     <jdkHome>/opt/java7</jdkHome>
   </configuration>
 </toolchain>
</toolchains>

它允许您定义 Maven 可以使用哪些不同的 JDK 来构建项目,而不管 Maven 使用什么 JDK 运行。有点像在 IDE 中在项目级别定义 JDK。当我需要使用 Java 7 构建另一个项目并默认使用 Java 8 时,我使用了它。

我想这可以解决你的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不同JDK版本的Maven编译 的相关文章

随机推荐

  • 将自定义道具传递给react-router v4中的路由器组件

    我正在使用 React Router 创建一个多页面应用程序 我的主要组成部分是
  • 使用 Swift 向下循环移动 SKSpriteNode

    使用 Swift 和 SpriteKit 我想以螺旋模式移动 SKSpritenode 但没有找到合适的资源来帮助我开始 更准确地说 我想以向下循环的方式移动精灵节点 我检查了一系列 SKActions 但由于它们不是并行执行的 因此与 m
  • 以 PHP5 中的数组形式返回当前日历周的日期

    我如何组合一个 PHP5 函数来查找当前日历周并以数组形式返回一周中每一天的日期 从星期一开始 例如 如果该函数今天运行 2010 年 2 月 25 日星期四 该函数将返回一个如下数组 0 gt Mon Feb 22 2010 br 1 g
  • 为什么 Unicode 字符在数据库中显示正确,但显示为 ?当通过 Hibernate 在 Java 中打印时?

    我正在编写一个 web 应用程序 并使用 Hibernate 3 5 与 MySQL 交互 使用 sukutoppu 作为我的测试字符串 我可以输入该字符串并查看它是否已正确保存到数据库中 但是 当我后来从数据库中提取该值并将其作为字符串打
  • C# 使用 Linq 连接 3 个列表 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想加入 3 个具有以下格式的列表
  • Wireshark 中看到的数据报,Qt UDP Socket 未接收到

    我正在编写一个 Qt 5 6 应用程序 通过 UDP 套接字与 FPGA 进行通信 数据包以 2 KHz 的速率传输到 PC 所有数据包大小相同 1272 字节 Wireshark 显示数据包正在发送 并且 UDP 标头符合预期 问题是 我
  • SmartGWT GWT 客户端服务器架构

    我们计划使用智能GWT GWT和相关框架用于客户端丰富的接口 以及在服务器端返回JSON数据的Spring MVC 作为调查是否符合我们要求的一部分 需要回答以下问题 在不使用任何框架的情况下从头开始构建 GWT 应用程序需要付出大量努力才
  • 使用 DbSet 应用 OrderBy

    我正在尝试使用通用存储库实现分页和排序 如何在 DbSet 中将主键列作为默认按列排序 DbSet Context Set
  • 获取唤醒我的 Activity 的 Intent

    我正在开发一个包含广播接收器的应用程序 广播接收者在 onReceive 上设置一个通知 其中包含一个待处理的 Intent Intent updateHistoryIntent new Intent this NotificationsH
  • IntelliJ 的“UML 支持”插件

    我肯定错过了什么 我在读本文 https www jetbrains com idea help working with diagrams html它说有一个名为 UML Support 的插件默认启用 我没有它 所以我转到 首选项 gt
  • 如何对 HTML 标记属性使用多行值? (即如何转义换行符?)

    如何在 HTML 标记属性中包含换行符 例如 a href somepage html some link a Edit 抱歉 例子不好 如果标签碰巧不在 javascript 中怎么办 比如说
  • 类型 'K' 不能用于索引类型 '{ [key in keyof K]: V; }'.ts(2536)

    我想创建一个从自定义对象类型返回新对象的方法 type K represent the type of key in an object type V represent the type of value in an object cla
  • 使用unix终端解析XML

    有时我需要快速从 XML 文件中提取一些任意数据以放入 CSV 格式 在 Unix 终端中执行此操作的最佳实践是什么 我想要一些代码示例 那么例如我怎样才能解决以下问题 XML 输入示例
  • 分析递归算法 T(n) = T(n - 1) + T(n - 2) + T(n -3)?

    于是 有人发了这个question https stackoverflow com questions 17239861 how would i get the order of algorithm tn tn 1tn 2 tn 3 com
  • 对象当前正在其他地方使用

    我收到此错误 看起来是因为不同的线程正在访问同一个 Bitmap 对象 然而我到处都使用锁 public class MySingleInstanceClass private Object locker new Object privat
  • 添加将 Excel 数据粘贴到 Django 表单中的功能

    我目前有一个 Django 表单 它有 N 行 x 12 列的表格形状的文本框 用户可以一次填充此表单一个文本框 注意 该表仅显示 9 列 但我使用的实际表格是 12 列
  • boost::asio::ip::tcp::socket 没有读取任何内容

    这实际上是我在套接字编程中的第一个程序 除了复制粘贴教程代码并享受乐趣之外 无论如何它都不起作用 我想我已经仔细阅读了文档 但也许还不够 我怀疑我使用socket read some in read message 因为我的有问题的程序停在
  • 从 jsonfile 数据创建多个 Chart.js 图表

    我使用 python 创建了一个 json 文件 它是一个列表列表 每个子列表都有一个 Chart js 图表的数据 即chartObject 0 has chartObject 0 0 and chartObject 0 1 对于 x 和
  • Android 如何从 facebook 获取用户关于我的信息

    我想在 Facebook 应用程序中获取 user about me 权限的信息 我能够获取电子邮件 位置 但我尝试获取 about me 它只提供 id 我想要所有信息 我怎样才能做到这一点 我就是这样做的 bundle putStrin
  • 不同JDK版本的Maven编译

    我的应用程序分为使用 Java 1 6u45 和 Java 1 8 的用户 我们的问题是我们无法指定项目系统库并且同时对代码有两种不同的编译器设置 项目结构 Project gt gt src main java com us javafx