问题描述
我正在使用 Eclipse IDE,使用 Kryonet 和 LibGDX 库。
我目前正在尝试制作一个胖 jar 文件 - 使 kryonet 成为一个依赖项。
这是我的 build.gradle 文件
sourceCompatibility = 1.7
sourceSets.main.java.srcDirs = [ "src/" ]
sourceSets.main.resources.srcDirs = ["../core/assets"]
project.ext.mainClassName = "uk.ac.aston.teamproj.game.desktop.DesktopLauncher"
project.ext.assetsDir = new File("../core/assets")
task run(dependsOn: classes,type: JavaExec) {
main = project.mainClassName
classpath = sourceSets.main.runtimeClasspath
standardInput = system.in
workingDir = project.assetsDir
ignoreExitValue = true
}
task debug(dependsOn: classes,type: JavaExec) {
main = project.mainClassName
classpath = sourceSets.main.runtimeClasspath
standardInput = system.in
workingDir = project.assetsDir
ignoreExitValue = true
debug = true
}
task dist(type: Jar) {
manifest {
attributes 'Main-Class': project.mainClassName
}
dependsOn configurations.runtimeClasspath
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
with jar
}
dist.dependsOn classes
eclipse.project.name = appName + "-desktop"
解决方法
听起来你可以使用“Shadow”gradle插件来制作胖罐子,它使这个过程变得更简单。
您可以找到有关如何使用它的详细说明here
如果你想要一个可执行的 jar,不要忘记指定 MainClass 属性。下面是一个用法示例:
buildscript {
ext {
shadowVersion = "5.2.0"
mainClassName = "com.yourapp.>>>CLASS_NAME_CONTAINING_YOUR_MAIN_METHOD_GOES_HERE<<<"
}
// Repositories for build scripts
repositories {
// Maven
mavenLocal()
mavenCentral()
// Sonatype repositories
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
maven { url "https://oss.sonatype.org/content/repositories/releases/" }
}
// Dependencies for build scripts
dependencies {
classpath "com.github.jengelman.gradle.plugins:shadow:$shadowVersion"
}
}
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'java'
jar {
manifest {
attributes(
"Main-Class": project.mainClassName,)
}
}
这会将以下内容添加到您的构建中:
- 向项目添加
shadowJar
任务。 - 向项目添加
shadow
配置。 - 配置
shadowJar
任务以包含项目主 sourceSet 中的所有源。 - 配置
shadowJar
任务以捆绑runtimeClasspath
配置中的所有依赖项。 - 将
classifier
任务的shadowJar
属性配置为“all”。 - 配置
shadowJar
任务以生成具有以下内容的清单:- 从标准 jar 任务继承所有配置。
- 向
Class-Path
添加Manifest
属性,该属性附加来自影子配置的all dependencies
shadowJar
任务将构建胖 jar,如果您在 jar
配置中为清单指定了 Main-Class 属性,则它可以是可执行的,就像我在上面的示例中所做的那样。