• Forge论坛

导航页

  • 主页
  • 向这篇文档做出贡献
  • 入门
    • 概述
  • 配置选项
    • 概述
    • 运行配置
    • 进阶主题
  • 依赖
    • 概述
    • Jar-in-Jar
      • 添加依赖
      • 将一个Jar-in-Jar发布到Maven
  • 移植到当前版本

Jar-in-Jar

Jar-in-Jar是从模组的jar中加载模组依赖项的一种方式。为了实现这一点,Jar-in-Jar在构建时在META-INF/jarjar/metadata.json中生成一个元数据json,其中包含要从jar中加载的artifact。

Jar-in-Jar是一个完全可选的系统,可以在minecraft块之前使用jarJar#enable来启用。这将把jarJar配置中的所有依赖项都包含到jarJar任务中。你能够以类似于其他jar任务的方式来配置该任务:

// 在build.gradle中

// 为你的模组启用Jar-in-Jar系统
jarJar.enable()


// 配置'jarJar'任务
// 'all'是默认的分类器(classifier)
tasks.named('jarJar') {
    // ...
}

添加依赖

你可以使用jarJar配置添加要包含在jar中的依赖项。由于Jar-in-Jar是一个协商(negotiation)系统,所有版本都应该提供一个支持的范围。

// 在build.gradle中
dependencies {
    // 根据examplelib在从2.0(包括)到3.0(不包括)之间的最高支持版本编译并包含该版本
    jarJar(group: 'com.example', name: 'examplelib', version: '[2.0,3.0)')
}

如果需要指定要包含的确切版本,而不是该范围中支持的最高版本,则可以在依赖关系闭包中使用jarJar#pin。在这些情况下,artifact版本将在编译时使用,而固定(pinned)版本将捆绑在模组jar中。

// 在build.gradle中
dependencies {
    // 根据examplelib在从2.0(包括)到3.0(不包括)之间的最高支持版本编译并包含该版本
    jarJar(group: 'com.example', name: 'examplelib', version: '[2.0,3.0)') {
      // 包含examplelib 2.8.0
      jarJar.pin(it, '2.8.0')
    }
}

你可以在针对特定版本进行编译时附加固定一个版本范围:

// 在build.gradle中
dependencies {
    // 编译examplelib 2.8.0
    jarJar(group: 'com.example', name: 'examplelib', version: '2.8.0') {
      // 包含从2.0(包括)到3.0(不包括)之间的最高支持版本的examplelib
      jarJar.pin(it, '[2.0,3.0)')
    }
}

使用运行时依赖

如果你想在jar中包含模组的运行时依赖项,你可以在构建脚本中调用jarJar#fromRuntimeConfiguration。如果你决定使用此选项,强烈建议你包含依赖项筛选器;否则,包括Minecraft和Forge在内的每一个依赖项都将捆绑在jar中。为了支持更灵活的语句,dependency配置已添加到jarJar扩展和任务中。使用此选项,可以指定要包含在配置中或从配置中排除的模式:

// 在build.gradle中

// 为jar添加运行时依赖项
jarJar.fromRuntimeConfiguration()

// ...

jarJar {
    // 在此处包含或排除运行时依赖项
    dependencies {
        // 排除以'com.google.gson.'开头的任何依赖项
        exclude(dependency('com.google.gson.*'))
    }
}

提示

使用#fromRuntimeConfiguration时,通常建议至少设置一个include筛选器。

将一个Jar-in-Jar发布到Maven

出于存档原因,ForgeGradle支持将Jar-in-Jar artifact发布给选定的Maven,类似于Shadow插件处理它的方式。在实践中,这不是有用的,也不推荐使用。

// I在build.gradle中(具有'maven-publish'插件)

publications {
    mavenJava(MavenPublication) {
        // 添加标准java组件和Jar-in-Jar artifact
        from components.java
        jarJar.component(it)

        // ...
    }
}
Built with MkDocs using a custom theme. Hosted by Read the Docs.
Enable Dark Theme