Gradle 构建 jar 在 运行 时找不到依赖项

Gradle build jar cannot find dependency at run time

我有以下 build.gradle 文件,其中包含 json-简单依赖项:

apply plugin: 'java'
repositories {
    mavenCentral()
}
 
dependencies {
    testImplementation('org.junit.jupiter:junit-jupiter-api:5.4.2')
    testRuntime('org.junit.jupiter:junit-jupiter-engine:5.4.2')
    compile 'com.googlecode.json-simple:json-simple:1.1.1'
}

test {
    useJUnitPlatform()
}
jar {
  manifest {
    attributes(
      'Main-Class': 'src.main.java.demo.Hello'
    )
  }
}

我下面的 class 使用了 json-simple:

package src.main.java.demo;

import org.json.simple.parser.JSONParser;
import org.json.simple.JSONObject;


public class Hello{
    public String hello(){
        try{String jsonString="{\"first\":\"Hello\",\"second\":\"world\"}";
        JSONParser jspa=new JSONParser();
        JSONObject job=(JSONObject)jspa.parse(jsonString);
        return (String)job.get("first");    }
        catch(Exception e){
            return "";
        }
    }
    public static void main(String[] args)
    {
        System.out.println(new Hello().hello());    
    } 
}

项目构建成功,但是在运行项目创建的jar文件中,它说找不到JSONParser and JSONObject。这意味着这些依赖项不会在运行时添加。我应该怎么做才能将它们添加到 class 路径?

谢谢!

你应该创建一个 fat jar。像这样更改构建 gradle

jar {
   manifest { 
      attributes "Main-Class": "src.main.java.demo.Hello"
   }  

  from {
     configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it)}        
   }
}

对于年龄较大的 Gradle 你应该使用这个

from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}