如何使用 Gradle 制作多版本 JAR 文件?

2024-02-07

Java9引入了多版本 JAR http://openjdk.java.net/jeps/238.

假设我有使用 java 8 的多模块 Gradle 项目:

project-root
      settings.gradle
      build.gradle 
      /module1
          /src
          ... (common maven structure)
      /module2
      /module3

这是 Gradle 中常见的多模块项目。假设我需要 MR-Jarmodule1.

我无法添加module1-java9目标是 Java9,因为基础是 8 - 到目前为止,我的 Gradle 和 IntelliJ IDEA 都抱怨。 Gradle是用java8编译的,但我需要为模块启用java9运行时(不知道如何);在 IntelliJ IDEA 中,我可以为模块设置 java9 运行时,但每次重新加载 gradle 配置时它都会被覆盖。

而且,即使我以某种方式添加它,我也需要指示module11) 构建第二个,2) 包括module1-java9。这是这种情况的图:

project-root
      settings.gradle
      build.gradle 
      /module1
      /module1-java9  (added java9 module)
      /module2
      ...

或者,这可以在下完成module1,具有不同的来源:src and src-java9。但我怀疑这是否会被接受。这是一张图:

project-root
      settings.gradle
      build.gradle 
      /module1
          /src
          /src-java9 (added java9 source folder)
      /module2
      /module3

到目前为止我只看到了module1-java9是一个单独的项目(不是模块)并且module1只需调用 gradle 并获取输出即可。是的,这是 gradle 调用 gradle :)))

有没有对开发人员友好的方法来做到这一点?


正如该问题的评论中提到的,这篇博文 https://blog.gradle.org/mrjars以及相关的示例项目 https://github.com/melix/mrjar-gradle描述如何使用 Gradle 创建多版本 JAR。

如果博客文章或示例项目消失,您还可以参考以下设置,该设置源自示例项目,并根据问题中给出的设置进行了一些定制(只要提供了详细信息)。

Overview

project-root/
├── build.gradle
├── module1
│   └── src
│       └── main
│           ├── java
│           │   └── com
│           │       └── acme
│           │           ├── JdkSpecific.java
│           │           └── Shared.java
│           └── java9
│               └── com
│                   └── acme
│                       └── JdkSpecific.java
├── module2
│   └── whatever
├── module3
│   └── whatever
└── settings.gradle

build.gradle

allprojects {
    apply plugin: 'java'

    compileJava {
        sourceCompatibility = 8
        targetCompatibility = 8
    }
}

dependencies {
    implementation project(':module1')
}

project(':module1') {
    sourceSets {
        java9 {
            java {
                srcDirs = ['src/main/java9']
            }
        }
    }

    compileJava9Java {
        sourceCompatibility = 9
        targetCompatibility = 9
    }

    dependencies {
        java9Implementation files(sourceSets.main.output.classesDirs) {
                builtBy compileJava
            }
    }

    jar {
        into('META-INF/versions/9') {
            from sourceSets.java9.output
        }
        manifest.attributes('Multi-Release': 'true')
    }
}

settings.gradle

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

如何使用 Gradle 制作多版本 JAR 文件? 的相关文章

随机推荐