如何使用具有依赖关系的gradle构建jar文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用具有依赖关系的gradle构建jar文件相关的知识,希望对你有一定的参考价值。
我正在用Gradle构建一个jar文件。此jar文件正在另一个项目中用作库。但是当项目尝试使用jar文件时,会返回ClassNotFoundException。
Caused by: java.lang.NoClassDefFoundError: com/auth0/jwt/JWT
我在构建jar的gradle文件中包含了jwt库:
compile group: 'com.auth0', name: 'java-jwt', version: '3.4.0'
使用jar的项目似乎无法在jar中找到这个jar依赖项。
我使用gradle命令构建了jar:
task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'Jar File creation',
'Implementation-Version': version,
'Main-Class': 'com.group.me.name.MyJarClass'
}
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
}
如何在jar中包含缺少的依赖项?
答案
通常,您不应将依赖项打包在已发布的JAR中。最好在pom.xml
中将它们声明为依赖项,并让JAR的用户获取它们。这应该是一个很好的做法。
如果还不够,请使用Gradle Shadow:
plugins {
id 'com.github.johnrengelman.shadow' version '4.0.2'
}
在这种情况下,Fat JAR是使用shadowJar
任务生成的。出版也很简单:
publishing {
publications {
shadow(MavenPublication) { publication ->
project.shadow.component(publication)
}
}
repositories {
maven {
url "http://your.repo"
}
}
}
以上是关于如何使用具有依赖关系的gradle构建jar文件的主要内容,如果未能解决你的问题,请参考以下文章
如何从具有 gradle 依赖关系的代码创建一个 Android 库?
如何根据构建变体使用 gradle 不同依赖模块的依赖项进行编译?