java - 如何打包 forge mod 的依赖项,同时避免类冲突?

标签 java gradle minecraft minecraft-forge

这是当前我的 build.gradle 文件(我删除了不必要的任务引用,这些引用不仅工作得很好,而且与当前问题无关):

buildscript {
    repositories {
        jcenter()
        maven {
            name = 'forge'
            url = 'https://files.minecraftforge.net/maven'
        }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT'
    }
}

apply plugin: 'net.minecraftforge.gradle.forge'
apply plugin: 'java'

dependencies {
    compile('some.library:here:1.2.3') // no extra modules
    compile('other.library:here:4.5.6') // multiple modules
}

jar {
    from project.configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}

目前我有一个系统,它会自动将所有依赖项打包到我的 jar 文件中。我遇到的主要问题是,如果另一个 mod 或文件在我的 mod 之前加载相同的库,我最终会遇到类加载问题,因为我将加载同一个类两次(一个来自另一个 jar,一个来 self 的自己的)。

话虽如此,是否可以避免这样的问题?我该如何真正解释这样的事情呢? forge 是否有一种方法可以控制类加载,使其不会加载重复的库,从而不会出现类冲突?

最佳答案

Minecraft Forge 支持一种称为着色的功能来处理这个问题。当您为 jar 着色时,它会集成到您的 jar 中,但包会被重命名为唯一的名称(以及代码中对它的所有引用)。

来源:https://github.com/MinecraftForge/ForgeGradle/blob/FG_1.2/docs/user-guide/shading.md

关于java - 如何打包 forge mod 的依赖项,同时避免类冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57334859/

相关文章:

java - JPanel 未添加到 JFrame

java - 使用字符串输入中的字符填充二维数组

android - 项目的构建风格

java - 构建 docker 镜像不会因为 minecraft 服务器继续运行而停止

java - 如何移动掉落的元素?

arrays - Erlang中的大型可变字节数组

java - 可选 nillable 值的 JAX-WS 处理

java - ServletRequest 和 ServletContext 接口(interface)中 getRequestDispatcher() 中的单个方法

android - 如何发布多种版本的Android应用程序?

android - 更新到 sdk28 后构建项目的问题