如何使用具有依赖关系的gradle构建jar文件

问题描述 投票:0回答:1

我正在用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中包含缺少的依赖项?

java exception gradle jar
1个回答
1
投票

通常,您不应将依赖项打包在已发布的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"
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.