如何修复jgit的java.lang.ClassNotFoundException';Eclipse中的s类

如何修复jgit的java.lang.ClassNotFoundException';Eclipse中的s类,java,eclipse,noclassdeffounderror,classnotfoundexception,Java,Eclipse,Noclassdeffounderror,Classnotfoundexception,首先:我知道在这个话题上有很多问题,但我现在遇到的情况与标准完全不同,我无法解决 现在我使用的是Eclipse,我使用的是两个外部库:json和jgit 问题是:json可以工作,但jgit不行,为什么 当我运行代码时得到的是 `Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory at org.eclipse.jgit.util.SystemReader.<

首先:我知道在这个话题上有很多问题,但我现在遇到的情况与标准完全不同,我无法解决

现在我使用的是Eclipse,我使用的是两个外部库:json和jgit

问题是:json可以工作,但jgit不行,为什么

当我运行代码时得到的是

`Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.eclipse.jgit.util.SystemReader.<clinit>(SystemReader.java:55)
at org.eclipse.jgit.lib.BaseRepositoryBuilder.readEnvironment(BaseRepositoryBuilder.java:363)
at org.eclipse.jgit.api.InitCommand.call(InitCommand.java:58)
at org.eclipse.jgit.api.CloneCommand.init(CloneCommand.java:267)
at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:173)
at GitHub.GitHubAPI.init(GitHubAPI.java:35)
at GitHub.GitHubAPI.main(GitHubAPI.java:73)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 7 more
`
`线程“main”java.lang.NoClassDefFoundError中的异常:org/slf4j/LoggerFactory
位于org.eclipse.jgit.util.SystemReader(SystemReader.java:55)
位于org.eclipse.jgit.lib.BaseRepositoryBuilder.readEnvironment(BaseRepositoryBuilder.java:363)
位于org.eclipse.jgit.api.InitCommand.call(InitCommand.java:58)
位于org.eclipse.jgit.api.CloneCommand.init(CloneCommand.java:267)
位于org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:173)
位于GitHub.GitHubAPI.init(GitHubAPI.java:35)
位于GitHub.GitHubAPI.main(GitHubAPI.java:73)
原因:java.lang.ClassNotFoundException:org.slf4j.LoggerFactory
位于java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
位于java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
位于java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 还有7个
`
在互联网上阅读时,我意识到发生这个错误是因为JVM在运行时找不到我正在使用的类,但是我不知道如何解决这个问题。 奇怪的是,在另一个类中,我使用json库,这并没有给我带来任何问题

对于这两个库,我所做的是转到“配置构建路径”,将jar添加到“Modulepath”,并将这些jar的路径作为变量添加到“Classpath”中

这是我的代码,如果你需要的话

package GitHub;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
//import java.util.logging.Logger;

import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.ListBranchCommand.ListMode;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.InvalidRemoteException;
import org.eclipse.jgit.api.errors.TransportException;
import org.eclipse.jgit.lib.Ref;
//import org.eclipse.jgit.revwalk.RevCommit;




public class GitHubAPI {

//  private static Logger myLogger = Logger.getLogger("InfoLogging");
    private String projNameMin;
    private final String url = "https://github.com/apache/";
    private Git git;
    private String repoLocalPath;

    public GitHubAPI(String projectName) {
        this.projNameMin = projectName.toLowerCase();
        this.repoLocalPath = "./"+projNameMin+"Repo";
    }

    public void init() {
        String uri = url + projNameMin + ".git";
        try {
            git = Git.cloneRepository().setURI(uri).setDirectory(new File(repoLocalPath)).call(); //this line triggers the error
        } catch (InvalidRemoteException e) {
            e.printStackTrace();
        } catch (TransportException e) {
            e.printStackTrace();
        } catch (GitAPIException e) {
            e.printStackTrace();
        }
    }

    public ArrayList<GitCommit> getCommits(){
        ArrayList<GitCommit> commits = new ArrayList<GitCommit>();  
//      Iterable<RevCommit> commitsLog = null;
      
        try {
//          boolean head = false;
            List<Ref> branches = git.branchList().setListMode(ListMode.ALL).call();
            for (Ref branch: branches) {
                String branchName = branch.getName();
                System.out.println(branchName);
                if (branchName.startsWith("refs/heads/")) {
//                  head = true;
                }
            }
        } catch (GitAPIException e) {
            e.printStackTrace();
        }
    
        return commits;
    
    }
    

    public static void main(String[] args) {
        GitHubAPI githubapi = new GitHubAPI("VCL");
        githubapi.init();
    
        githubapi.getCommits();
    }

}
包GitHub;
导入java.io.File;
导入java.util.ArrayList;
导入java.util.List;
//导入java.util.logging.Logger;
导入org.eclipse.jgit.api.Git;
导入org.eclipse.jgit.api.ListBranchCommand.ListMode;
导入org.eclipse.jgit.api.errors.GitAPIException;
导入org.eclipse.jgit.api.errors.InvalidRemoteException;
导入org.eclipse.jgit.api.errors.TransportException;
导入org.eclipse.jgit.lib.Ref;
//导入org.eclipse.jgit.revwalk.RevCommit;
公共类GitHubAPI{
//私有静态记录器myLogger=Logger.getLogger(“InfoLogging”);
私有字符串projNameMin;
私有最终字符串url=”https://github.com/apache/";
私人吉特;
私有字符串路径;
公共GitHubAPI(字符串projectName){
this.projNameMin=projectName.toLowerCase();
this.repologicpath=“./”+projNameMin+“Repo”;
}
公共void init(){
字符串uri=url+projNameMin+“.git”;
试一试{
git=git.cloneRepository().setURI(uri).setDirectory(新文件(repoclocalpath)).call();//此行触发错误
}捕获(无效删除异常e){
e、 printStackTrace();
}捕获(运输例外){
e、 printStackTrace();
}捕获(Gitapie异常){
e、 printStackTrace();
}
}
公共ArrayList getCommits(){
ArrayList提交=新建ArrayList();
//Iterable commitsLog=null;
试一试{
//布尔头=假;
List branchs=git.branchList().setListMode(ListMode.ALL).call();
对于(参考分支机构:分支机构){
字符串branchName=branch.getName();
System.out.println(branchName);
if(branchName.startsWith(“refs/heads/”){
//头=真;
}
}
}捕获(Gitapie异常){
e、 printStackTrace();
}
返回承诺;
}
公共静态void main(字符串[]args){
GitHubAPI GitHubAPI=新的GitHubAPI(“VCL”);
githubapi.init();
githubapi.getCommits();
}
}

有人知道如何解决这个问题吗?

直截了当地说,这个错误是由于缺少slf4j依赖项而产生的

如果是maven项目,则在pom.xml中添加以下依赖项:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>
<!-- This is used for slf4j binding with log4j -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.25</version>
    <scope>test</scope>
</dependency>

org.slf4j


Slf4j-Log4j12-

@Abra还好,但我不知道该怎么办。此外,在Modulepath实体和类路径实体中,存在配置模块路径中的JAR和变量。是否有一种方法不必逐个查找JAR,或者至少有一种方法不必在类路径中为每个指向JAR的JAR创建变量?