如何使用 Gradle 在我的 JAR 中包含单个依赖项?
How do I include a single dependency in my JAR with Gradle?
我从 Gradle 开始,我想知道如何将单个依赖项(在我的例子中是 TeamSpeak API)包含到我的 JAR 中,以便它可以在运行时使用。
这是我的一部分 build.gradle :
apply plugin: 'java'
compileJava {
sourceCompatibility = '1.8'
options.encoding = 'UTF-8'
}
jar {
manifest {
attributes 'Class-Path': '.......'
}
from {
* What should I put here ? *
}
}
dependencies {
compile group: 'org.hibernate', name: 'hibernate-core', version: '4.3.7.Final'
compile group: 'org.spigotmc', name: 'spigot', version: '1.8-R0.1-RELEASE'
// Many other dependencies, all available at runtime...
// This one isn't. So I need to include it into my JAR :
compile group: 'com.github.theholywaffle', name: 'teamspeak3-api', version: '+'
}
感谢您的帮助:)
最简单的方法是从您要包含的依赖项的单独配置开始。我知道您只询问了一个 jar,但如果您向新配置添加更多依赖项,此解决方案将起作用。 Maven 对这种东西有一个众所周知的名称,叫做 provided
,所以我们将使用它。
configurations {
provided
// Make compile extend from our provided configuration so that things added to bundled end up on the compile classpath
compile.extendsFrom(provided)
}
dependencies {
provided group: 'org.spigotmc', name: 'spigot', version: '1.8-R0.1-RELEASE'
}
jar {
// Include all of the jars from the bundled configuration in our jar
from configurations.provided.asFileTree.files.collect { zipTree(it) }
}
使用 provided
作为配置的名称也很重要,因为当发布 jar 时,您在 provided
配置中的任何依赖项将显示为 provided
POM.xml 与 JAR 一起发布。 Maven 依赖项解析器不会拉下 provided
依赖项,并且您的 jar 用户最终不会在类路径上得到 类 的重复副本。参见 Maven Dependency Scopes
我从 Gradle 开始,我想知道如何将单个依赖项(在我的例子中是 TeamSpeak API)包含到我的 JAR 中,以便它可以在运行时使用。
这是我的一部分 build.gradle :
apply plugin: 'java'
compileJava {
sourceCompatibility = '1.8'
options.encoding = 'UTF-8'
}
jar {
manifest {
attributes 'Class-Path': '.......'
}
from {
* What should I put here ? *
}
}
dependencies {
compile group: 'org.hibernate', name: 'hibernate-core', version: '4.3.7.Final'
compile group: 'org.spigotmc', name: 'spigot', version: '1.8-R0.1-RELEASE'
// Many other dependencies, all available at runtime...
// This one isn't. So I need to include it into my JAR :
compile group: 'com.github.theholywaffle', name: 'teamspeak3-api', version: '+'
}
感谢您的帮助:)
最简单的方法是从您要包含的依赖项的单独配置开始。我知道您只询问了一个 jar,但如果您向新配置添加更多依赖项,此解决方案将起作用。 Maven 对这种东西有一个众所周知的名称,叫做 provided
,所以我们将使用它。
configurations {
provided
// Make compile extend from our provided configuration so that things added to bundled end up on the compile classpath
compile.extendsFrom(provided)
}
dependencies {
provided group: 'org.spigotmc', name: 'spigot', version: '1.8-R0.1-RELEASE'
}
jar {
// Include all of the jars from the bundled configuration in our jar
from configurations.provided.asFileTree.files.collect { zipTree(it) }
}
使用 provided
作为配置的名称也很重要,因为当发布 jar 时,您在 provided
配置中的任何依赖项将显示为 provided
POM.xml 与 JAR 一起发布。 Maven 依赖项解析器不会拉下 provided
依赖项,并且您的 jar 用户最终不会在类路径上得到 类 的重复副本。参见 Maven Dependency Scopes