You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetBeans中使用Gradle导出包含指定依赖的Jar文件配置方法

将指定依赖打包进Gradle构建Jar的操作方法

你当前的配置默认只会在编译阶段引用依赖,不会把implementation声明的依赖打入最终生成的Jar,按照以下步骤修改配置即可,适配NetBeans+Gradle的Spigot插件开发场景:

推荐方案:使用Shadow插件打包(稳定无冲突,MC插件开发通用方案)

Shadow是Gradle生态最常用的胖包打包插件,会自动处理依赖类文件、配置文件的合并,不会出现默认打包方式的资源冲突问题。

  • 在plugins块中添加Shadow插件声明:
plugins {
    id 'java'
    // 新增Shadow插件,7.1.2版本兼容Gradle 7.x环境,NetBeans可正常识别
    id 'com.github.johnrengelman.shadow' version '7.1.2'
}
  • 在配置文件末尾添加Shadow任务配置,直接将包含依赖的包作为默认输出Jar,不需要额外识别带特殊后缀的包:
shadowJar {
    // 清空分类器,直接替换原普通Jar作为构建输出
    archiveClassifier.set('')
    // 自动排除所有compileOnly声明的依赖(本地的spigot、ProtocolLib等服务端已提供的包都不会被打入,避免类冲突)
    configurations = [project.configurations.runtimeClasspath]
}

// 配置build任务自动执行shadowJar,点击NetBeans的构建按钮即可直接生成含依赖的Jar
build.dependsOn shadowJar
  • 完整修改后的build.gradle参考:
plugins {
    id 'java'
    id 'com.github.johnrengelman.shadow' version '7.1.2'
}

group 'main.test'
version '1.0.7'

repositories {
    mavenCentral()
    maven { url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/' }
    maven { url = 'https://repo.codemc.io/repository/maven-public/' }
    maven { url = 'https://mvnrepository.com/artifact/it.unimi.dsi/fastutil' }
    maven { url = "https://repo.dmulloy2.net/repository/public/" }
    maven { url = "https://hub.spigotmc.org/nexus/content/groups/public/" }
}

dependencies {
    implementation("org.spongepowered:configurate-hocon:4.1.2")
    compileOnly 'org.jetbrains:annotations:23.0.0'
    compileOnly 'me.clip:placeholderapi:2.11.1'
    compileOnly 'fr.xephi:authme:5.6.0-SNAPSHOT'
    compileOnly 'it.unimi.dsi:fastutil:8.5.8'
    compileOnly "com.comphenix.protocol:ProtocolLib:4.7.0";
    compileOnly fileTree(dir: 'lib', include: 'spigot-1.8.8.jar')
    compileOnly fileTree(dir: 'lib', include: 'spigot-1.12.2.jar')
    compileOnly fileTree(dir: 'lib', include: 'spigot-1.16.5.jar')
    compileOnly fileTree(dir: 'lib', include: 'spigot-1.18.2-R0.1-SNAPSHOT.jar')
}

shadowJar {
    archiveClassifier.set('')
    configurations = [project.configurations.runtimeClasspath]
}

build.dependsOn shadowJar
  • 在NetBeans中右键项目选择「重新加载Gradle项目」,之后正常执行构建操作,生成的Jar存放在build/libs目录下,已经包含configurate-hocon及其关联的传递依赖,所有compileOnly声明的服务端依赖不会被打入,不会出现类冲突问题。

备选方案:不安装插件用原生Jar任务打包(不推荐,容易出现资源冲突)

如果不想额外安装插件,可以直接修改默认的jar任务,把依赖类拷贝进Jar,在配置末尾添加以下内容即可:

jar {
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    // 处理重复文件,遇到重复直接覆盖,部分SPI配置文件可能丢失导致依赖运行报错
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
}

注意:这种方式不会自动合并META-INF下的服务声明、配置文件,如果你引入的依赖有SPI加载逻辑,大概率会运行报错,优先选择Shadow方案。


内容的提问来源于stack exchange,提问作者Daniel Blasco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:48:13