JGit错误->;原因:java.lang.NoSuchMethodError:没有虚拟方法toPath()

JGit错误->;原因:java.lang.NoSuchMethodError:没有虚拟方法toPath(),java,file,repository,clone,jgit,Java,File,Repository,Clone,Jgit,我试图在Android Java上克隆存储库,但调用方法toPath()时出错。显然,文件对象没有toPath()方法 public void gitClone() throws GitAPIException { // File dir = new File(_ctx.getExternalFilesDir(null) + File.separator + "openshift_files"); Bundle b2 = getIntent().getExtras();

我试图在Android Java上克隆存储库,但调用方法
toPath()
时出错。显然,文件对象没有
toPath()
方法

public void gitClone() throws GitAPIException {

    // File dir = new File(_ctx.getExternalFilesDir(null) + File.separator + "openshift_files");
    Bundle b2 = getIntent().getExtras();
    //File localPath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath());
    final File localPath = new File(getExternalFilesDir(null) + File.separator + getCurrentApp().getName());

    Git.cloneRepository()
            .setURI(getUrlGit())
            .setDirectory(localPath)
            .setCredentialsProvider(new UsernamePasswordCredentialsProvider(b2.getString("OPEN_SHIFT_USER"), b2.getString("OPEN_SHIFT_PASSWORD")))
            .call();
    System.out.println("Success!");
}
这是堆栈跟踪

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #5
E/AndroidRuntime: Process: com.javier.openshift, PID: 22919
E/AndroidRuntime: java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime:     at android.os.AsyncTask$3.done(AsyncTask.java:304)
E/AndroidRuntime:     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
E/AndroidRuntime:     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818)
E/AndroidRuntime:  Caused by: java.lang.NoSuchMethodError: No virtual method toPath()Ljava/nio/file/Path; in class Ljava/io/File; or its super classes (declaration of 'java.io.File' appears in /system/framework/core-libart.jar)
E/AndroidRuntime:     at org.eclipse.jgit.util.FileUtil.exists(FileUtil.java:149)
E/AndroidRuntime:     at org.eclipse.jgit.util.FS_POSIX.exists(FS_POSIX.java:275)
E/AndroidRuntime:     at org.eclipse.jgit.internal.storage.file.ObjectDirectory.exists(ObjectDirectory.java:193)
E/AndroidRuntime:     at org.eclipse.jgit.internal.storage.file.FileRepository.<init>(FileRepository.java:207)
E/AndroidRuntime:     at org.eclipse.jgit.lib.BaseRepositoryBuilder.build(BaseRepositoryBuilder.java:579)
E/AndroidRuntime:     at org.eclipse.jgit.api.InitCommand.call(InitCommand.java:113)
E/AndroidRuntime:     at org.eclipse.jgit.api.CloneCommand.init(CloneCommand.java:161)
E/AndroidRuntime:     at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:132)
E/AndroidRuntime:     at com.javier.apps.AppsActivity.gitClone(AppsActivity.java:981)
E/AndroidRuntime:     at com.javier.apps.AppsActivity$AsyncTaskCloneRepository.doInBackground(AppsActivity.java:1002)
E/AndroidRuntime:     at com.javier.apps.AppsActivity$AsyncTaskCloneRepository.doInBackground(AppsActivity.java:985)
E/AndroidRuntime:     at android.os.AsyncTask$2.call(AsyncTask.java:292)
E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818) 
E/AndroidRuntime:致命异常:AsyncTask#5
E/AndroidRuntime:Process:com.javier.openshift,PID:22919
E/AndroidRuntime:java.lang.RuntimeException:执行doInBackground()时出错
E/AndroidRuntime:at-android.os.AsyncTask$3.done(AsyncTask.java:304)
E/AndroidRuntime:at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
E/AndroidRuntime:at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
E/AndroidRuntime:at java.util.concurrent.FutureTask.run(FutureTask.java:242)
E/AndroidRuntime:at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
E/AndroidRuntime:at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime:at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/AndroidRuntime:at java.lang.Thread.run(Thread.java:818)
E/AndroidRuntime:原因:java.lang.NoSuchMethodError:没有虚拟方法toPath()Ljava/nio/file/Path;Ljava/io/File类中;或者它的超类(声明'java.io.File'出现在/system/framework/core libart.jar中)
E/AndroidRuntime:org.eclipse.jgit.util.FileUtil.exists(FileUtil.java:149)
E/AndroidRuntime:org.eclipse.jgit.util.FS_POSIX.exists(FS_POSIX.java:275)
E/AndroidRuntime:org.eclipse.jgit.internal.storage.file.ObjectDirectory.exists(ObjectDirectory.java:193)
E/AndroidRuntime:org.eclipse.jgit.internal.storage.file.FileRepository(FileRepository.java:207)
E/AndroidRuntime:org.eclipse.jgit.lib.BaseRepositoryBuilder.build(BaseRepositoryBuilder.java:579)
E/AndroidRuntime:org.eclipse.jgit.api.InitCommand.call(InitCommand.java:113)
E/AndroidRuntime:org.eclipse.jgit.api.CloneCommand.init(CloneCommand.java:161)
E/AndroidRuntime:org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:132)
E/AndroidRuntime:com.javier.apps.AppsActivity.gitClone(AppsActivity.java:981)
E/AndroidRuntime:com.javier.apps.AppsActivity$AsyncTaskCloneRepository.doInBackground(AppsActivity.java:1002)
E/AndroidRuntime:com.javier.apps.AppsActivity$AsyncTaskCloneRepository.doInBackground(AppsActivity.java:985)
E/AndroidRuntime:at-android.os.AsyncTask$2.call(AsyncTask.java:292)
E/AndroidRuntime:at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E/AndroidRuntime:at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
E/AndroidRuntime:at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime:at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/AndroidRuntime:at java.lang.Thread.run(Thread.java:818)

您使用的是JGit的最新版本。从JGIT4.0.0开始,最低Java版本从Java5升级到Java7()。JGit使用的是java7
Path
API,您正在使用的JDK无法使用它


您应该降级到JGit 3.7.1(这是3.x行中最新的一个)。

即使使用Java 7,
Java.nio.file.Path
在Android中与JGit依赖的其他
nio
类一起都不可用。详情如下:


所以@Tunaki的答案仍然是正确的,但原因不同。不幸的是,在Android上,我们被锁定在JGit 3.7.1上,直到那些
nio
类可用,即使在使用Java 7时也是如此。

您使用的是哪个版本的JGit?@Tunaki。这是一个版本:org.eclipse.jgit-4.0.1.201506240215-rI-am在使用相同JDK的NetBeans中使用jgit 4.1.0,工作正常@user3154785与Android有关(我对Android不太了解)。但是降级很可能会解决你的问题。