gpt4 book ai didi

java - 使用 gradle 依赖于 Java 9 Module System 库中的遗留 jar

转载 作者:行者123 更新时间:2023-12-04 07:53:37 28 4
gpt4 key购买 nike

问题
你如何创建一个java库jar:

  • 是java模块(有module-info)
  • 有一个依赖的遗留(非模块)jar。 (如 commons-exec )?

  • 依赖项是一个实现细节 - 不应导出。
    来源
    有以下 build.gradle (使用 gradle-6.8 ):
    plugins {
    id 'java-library'
    }

    group = 'test'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '15'

    repositories {
    mavenCentral()
    }
    java {
    modularity.inferModulePath = true
    }

    dependencies {
    implementation 'org.apache.commons:commons-exec:1.3'
    }
    和以下 module-info.java :
    module test.module {
    requires commons.exec;
    }
    错误
    我收到以下编译错误:
    module-info.java:2: error: module not found: commons.exec
    requires commons.exec;
    ^
    如果我不包括 requires commons.exec然后错误变为:
    error: package org.apache.commons.exec is not visible
    import org.apache.commons.exec.CommandLine;
    ^
    (package org.apache.commons.exec is declared in the unnamed module,
    but module test.module does not read it)
    commons.exec模块名称?
    运行 jar --file=commons-exec-1.3.jar --describe-module 输出:
    No module descriptor found. Derived automatic module.

    commons.exec@1.3 automatic
    requires java.base mandated
    contains org.apache.commons.exec
    contains org.apache.commons.exec.environment
    contains org.apache.commons.exec.launcher
    contains org.apache.commons.exec.util
    所以 commons.exec看起来像是 commons-exec-1.3.jar 的有效模块名称. Intelij Idea 似乎同意并在 module-info.java 中自动完成它.虽然它在构建时失败。

    最佳答案

    我设法使用 java-module-info 克服了同样的问题插入。

    This plugin allows you to add module information to a Java librarythat does not have any. If you do that, you can give it a propermodule name and Gradle can pick it up to put it on the module pathduring compilation, testing and execution.

    plugins {
    id 'java-library'
    id("de.jjohannes.extra-java-module-info") version "0.6"
    }
    将此部分添加到您的 build.gradle添加 公共(public)执行 模块信息
      extraJavaModuleInfo {
    module("commons-exec-1.3.jar", "org.apache.commons.exec", "1.3") {
    exports("org.apache.commons.exec")
    }
    }
    添加 requires org.apache.commons.exec;给您的 module-info.java 编辑 1 :
    Gradle 7.0 完全支持 Java 模块系统。用户现在可以 build, test, and run通过 Gradle 的 Java 模块。 module-info.java 的存在将让 Gradle 推断您的 jar 是一个模块,并且必须放在模块路径而不是传统的类路径上。
    Using libraries that are not modules

    关于java - 使用 gradle 依赖于 Java 9 Module System 库中的遗留 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66819713/

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