如何使用gradle构建jar文件

时间:2018-11-12 15:41:09

标签: java exception gradle jar

我正在用Gradle构建一个jar文件。该jar文件被用作另一个项目中的库。但是,当项目尝试使用jar文件时,将返回ClassNotFoundException。

const obj = {a: 1, b: { c: 2, d: { template: 'Date: <now>'}}};

const deepMap = (fn, xs) =>
  mapObjIndexed(
    (val, key, obj) =>
      or(is(Array, val), is(Object, val))
        ? deepMap(fn, fn(val)) 
        : fn(val),
    xs
  );

const checkFn = ({ template }) => template;
const transformFn = (val, key) => {
  const interpolated = val.template.replace('<now>', Date.now())
  console.log(interpolated);
  return interpolated;
};

const mapFn = n =>
  checkFn(n)
    ? transformFn(n)
    : n;
console.clear();
deepMap(mapFn, obj);

>> {"a": 1, "b": {"c": 2, "d": {}}}

我已经在构建jar的gradle文件中包含了jwt库:

  Caused by: java.lang.NoClassDefFoundError: com/auth0/jwt/JWT

使用jar的项目似乎无法在jar中找到此jar依赖项。

我用gradle命令构建了jar:

  compile group: 'com.auth0', name: 'java-jwt', version: '3.4.0'

如何在jar中包含缺少的依赖项?

1 个答案:

答案 0 :(得分:1)

通常,您不应将依赖项打包在已发布的JAR中。最好在pom.xml中将它们声明为依赖项,然后让您的用户JAR提取它们。只是一个好习惯就足够了。

如果还不够,请使用Gradle Shadow

plugins {
    id 'com.github.johnrengelman.shadow' version '4.0.2'
}
在这种情况下,使用shadowJar任务会生成

Fat JAR。发布也很容易:

publishing {
    publications {
        shadow(MavenPublication) { publication ->
            project.shadow.component(publication)
        }
    }
    repositories {
        maven {
            url "http://your.repo"
        }
    }
}