gpt4 book ai didi

gradle - 如何在使用 Gradle 构建 fat jar 时编译不同的口味

转载 作者:行者123 更新时间:2023-12-04 21:33:58 24 4
gpt4 key购买 nike

我想包括 Java Bindings for V8 (“J2V8”)在 Java 项目中。原因是 (i) V8 JavaScript 引擎比 JRE 附带的 JavaScript 引擎快得多,以及 (ii) 我使用的库仅在 JavaScript 中可用,并且要移植到 Java 需要付出很多努力。

问题是 J2V8 是 compiled for different platforms : linux 64 位,macos 64 位,windows 64 位,windows 32 位。

我现在想生成不同的 JAR,包含所有依赖项( fat jars ):

  • jabref-linux_x86_64.jar
  • jabref-macosx_x86_64.jar
  • jabref-windows_x86_32.jar
  • jabref-windows_x86_64.jar
  • jabref-all.jar - 不带 v8 引擎的平台独立 JAR

  • 我目前正在使用 shadow plugin 创建 fat jar .

    注意项目是 不是 一个安卓项目。在那里,使用 Android 插件,这样做似乎很简单。

    第一个想法是引入配置和特定于配置的依赖项:
    configurations {
    linux_x86_64Compile.extendsFrom compile
    macosx_x86_64Compile.extendsFrom compile
    windows_x86_32Compile.extendsFrom compile
    windows_x86_64Compile.extendsFrom compile
    }

    dependencies {
    compile configuration: 'linux_x86_64', group: 'com.eclipsesource.j2v8', name: 'j2v8_linux_x86_x64', version: '4.6.0'
    compile configuration: 'macosx_x86_64', group: 'com.eclipsesource.j2v8', name: 'j2v8_macosx_x86_x64', version: '4.6.0'
    compile configuration: 'windows_x86_32', group: 'com.eclipsesource.j2v8', name: 'j2v8_win32_x86', version: '4.6.0'
    compile configuration: 'windows_x86_64', group: 'com.eclipsesource.j2v8', name: 'j2v8_win32_x86_x64', version: '4.6.0'
    ...
    }

    但现在我被困住了。在伪代码中,我想做:
    task releaseSingleJar(dependsOn: "shadowJar", name) {
    doLast {
    copy {
    from("$buildDir/libs/JabRef-${project.version}-fat.jar")
    into("$buildDir/releases/")

    rename { String fileName ->
    fileName.replace('-fat', '-$name')
    }
    }
    }
    }

    task releaseJars() {
    forEach name in "linux_x86_64", "macosx_x86_64", "windows_x86_32", "windows_x86_64", "all":
    if (name != "all") activate configuration $name
    releaseSingleJar($name)
    shadowJar来自影子插件。

    背景资料
  • 显示我们设置中速度差异的视频:https://github.com/JabRef/jabref/pull/2250#issuecomment-264824598
  • JabRef 中集成的当前状态:https://github.com/JabRef/jabref/pull/3180

  • 相关问题

    问题 Using Gradle to manage Java web app with flavors like Android有一个类似的标题,但要求提供源目录,而我要求提供依赖项。此外,我想生成一个胖 JAR,一个普通的 JAR 似乎就足够了。但是,解决方案可能是相似的。一个提示是使用 gradle-java-flavours plugin主要来源是 JavaFlavoursExtension.groovy .

    以下问题与此类似。但是,该设置与 Android 应用程序相关,与普通 Java 应用程序无关。
  • How to define different dependencies for different product flavors
  • Gradle: add dependency for a specific flavour of the library
  • Change dependency through a task in gradle
  • Use different resources for different application flavors using gradle
  • 最佳答案

    您可能对我的 gradle-java-flavours plugin 感兴趣它为纯 Java 项目中的每个风格创建源集、配置和编译、jar 和测试任务。

    例如:

    import com.github.jengelman.gradle.plugins.shadow.tasks.*
    plugins {
    id 'com.lazan.javaflavours' version '1.2'
    id 'com.github.johnrengelman.shadow' version '1.2.4'
    }
    def flavours = ['linux_x86_64', 'macosx_x86_64', ...]
    javaFlavours {
    flavours.each {
    flavour it
    }
    }
    dependencies {
    linux_x86_64Compile 'aaa:aaa:1.0'
    linux_x86_64Runtime 'bbb:bbb:1.0'
    macosx_x86_64TestCompile 'ccc:ccc:3.0'
    }
    flavours.each { String flavour ->
    SourceSet flavourSourceSet = sourceSets.getByName(flavour)
    Configuration flavourRuntime = configurations.getByName("${flavour}Runtime")
    JavaCompile flavourCompileTask = tasks.getByName("compile${flavour.capitalize()}Java")
    Task shadowJarTask = tasks.create(name: "${flavour}ShadowJar", type: ShadowJar) {
    classifier = "${flavour}-all"
    dependsOn flavourCompileTask
    // todo configure (likely based on Configuration and SourceSet)
    }
    artifacts {
    archives shadowJarTask
    }
    // wire the task into the DAG
    assemble.dependsOn shadowJarTask
    }

    关于gradle - 如何在使用 Gradle 构建 fat jar 时编译不同的口味,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43459663/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com