'java.lang'을 어떻게 풀어요?"No Class Def Found Error?"
Oracle의 Java 튜토리얼에서 두 가지 예를 모두 사용해 보았습니다.둘 다 정상적으로 컴파일되지만 런타임에는 둘 다 다음 오류가 발생합니다.
Exception in thread "main" java.lang.NoClassDefFoundError: graphics/shapes/Square
at Main.main(Main.java:7)
Caused by: java.lang.ClassNotFoundException: graphics.shapes.Square
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
가 가지고 것 ...Main.java
파일을 다른 폴더에 저장합니다.
디렉토리 계층은 다음과 같습니다.
graphics
├ Main.java
├ shapes
| ├ Square.java
| ├ Triangle.java
├ linepoint
| ├ Line.java
| ├ Point.java
├ spaceobjects
| ├ Cube.java
| ├ RectPrism.java
여기 .Main.java
:
import graphics.shapes.*;
import graphics.linepoint.*
import graphics.spaceobjects.*;
public class Main {
public static void main(String args[]) {
Square s = new Square(2, 3, 15);
Line l = new Line(1, 5, 2, 3);
Cube c = new Cube(13, 32, 22);
}
}
내가 여기서 뭘 잘못하고 있는 거지?
갱신하다
Main
로 into로 graphics
를 했습니다)package graphics;
그래픽이 있는 '_test'(그래픽이 들어 있는 폴더)를 사용하여 합니다.java graphics.Main
을 사용하다
최신 업데이트 #2
Eclipse(메모장++와 JDK만)를 사용하고 있지 않았고, 위의 업데이트로 문제가 해결되었습니다.그러나, 이러한 답변의 대부분은 이클립스와 인텔리J IDEA를 위한 것으로 보이지만, 그들은 비슷한 개념을 가지고 있다.
하면, 「 」가 ..class
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★이 바이너리 파일은 Java가 프로그램을 실행하기 위해 해석하는 바이트 코드입니다.NoClassDefFoundError
경우 classloader('))가java.net.URLClassLoader
의 동적 는, 「 」, 「 」, 「 」를 찾을 수 없습니다..class
사용하려는 클래스의 파일을 작성합니다.
필수 클래스가 없으면 코드가 컴파일되지 않으므로(클래스가 리플렉션으로 로드되지 않는 한), 일반적으로 이 예외는 클래스 경로에 필수 클래스가 포함되지 않음을 의미합니다.으로 classloader('클래스로더'))에해 주세요.java.net.URLClassLoader
각에서 a의 ac의 클래스를 검색합니다는 클래스 패스의 각 엔트리에서 a/b/c/폴더내의 a.b.c 패키지의 클래스를 검색합니다. NoClassDefFoundError
컴파일한 .jar 파일의 transitive 의존관계가 없어 사용하려는 경우도 있습니다.
들어 「」가 있는 , 「」는 「」입니다.com.example.Foo
이 생깁니다.Foo.class
작업 는 " " 입니다.../project/
. 이이음음음음음음음음음음에 배치해야 .../project/com/example
를 '하다'로 설정합니다.../project/
.
사이드 노트:Java 및 JVM 언어에서 사용할 수 있는 놀라운 툴을 활용할 것을 권장합니다.Eclipse나 IntelliJ IDEA와 같은 최신 IDE와 Maven이나 Gradle과 같은 빌드 관리 툴을 사용하면 클래스 패스에 대해 걱정할 필요가 없어지고 코드에 집중할 수 있습니다.즉, 이 링크는 명령줄에서 실행할 때 클래스 경로를 설정하는 방법을 설명합니다.
제가 다른 NoClassDefFoundError
.
NoClassDefFoundError
다음과 같은 여러 가지 이유로 발생할 수 있습니다.
- ClassNotFoundException -- .class는 컴파일 시 사용 가능한지 여부에 관계없이 참조된 클래스에 대해 찾을 수 없습니다(예: base/child 클래스).
- 클래스 파일을 찾았지만 정적 변수를 초기화하는 동안 예외가 발생했습니다.
- 클래스 파일을 찾았습니다. 정적 블록을 초기화하는 동안 예외가 발생했습니다.
원래 질문에서는 CLASSPATH를 참조된 클래스 JAR 파일 또는 패키지 폴더로 설정하여 수정할 수 있는 첫 번째 케이스였습니다.
컴파일 타임에 사용 가능이라는 것은 무슨 뜻입니까?
- 이치노
A'B(A)''A'' 2'B'입니다.되고 있는 는, 할 수 B는 컴파일시에 사용할 수 있습니다.A a = new B();
컴파일 시에 사용할 수 없다'는 것은 무슨 뜻입니까?
- 컴파일 시간 클래스와 런타임 클래스가 다릅니다..forName("classname") : 확장 A.A'B(A)''A'' 2'B'입니다.에는 「」가 있습니다.
A a = Class.forName("B").newInstance();
NoClassDefFoundError
하는 것을 합니다.Compile time
Runtime
.
이클립스를 경우 이클립스가 하십시오.shapes
,linepoints
및spaceobjects
「」의 .classpath
filename을 클릭합니다.
컴파일 및 실행 중 다음 오류 중 하나가 발생한 경우:
NoClassDefFoundError(NoClassDefFound 오류)
오류: 주 클래스 hello를 찾거나 로드할 수 없습니다.
스레드 "main" java.lang에 예외가 있습니다.NoClassDefFoundError:javaTest/test/hello(잘못된 이름:test/hello)
at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
---------------------------------------------------------------------
문제는 주로 패키지 구성에 있습니다.소스 코드의 패키지 분류와 관련하여 클래스를 폴더에 올바르게 정렬해야 합니다.
컴파일 프로세스에서는 다음 명령을 사용합니다.
javac -d . [FileName.java]
클래스를 실행하려면 다음 명령을 사용하십시오.
java [Package].[ClassName]
java.lang.NoClassDefFoundError
컴파일 시에는 검출되었지만 실행시에는 검출되지 않았음을 나타냅니다.아마도 너는 그것을 클래스 패스에 추가해야 할 것이다.
Java의 NoClassDefFoundError:
정의:
클래스가 컴파일 시간 동안 존재했지만 실행 시 Java 클래스 경로에서 사용할 수 없는 경우 NoClassDefFoundError가 발생합니다.보통 스레드 "main" java.lang에 NoClassDefFoundError: Exception이 뜨면 로그에 다음 행이 표시됩니다.NoClassDefFoundError(NoClassDefFound 오류)
생각할 수 있는 원인:
Java Classpath에서는 클래스를 사용할 수 없습니다.
jar 명령을 사용하여 프로그램을 실행하고 있을 수 있으며 매니페스트 파일의 ClassPath 특성에 클래스가 정의되지 않았습니다.
모든 시작 스크립트가 Classpath 환경 변수를 재정의합니다.
NoClassDefFoundError는 java.lang의 서브클래스이기 때문입니다.LinkError는 네이티브라이브러리와 같은 의존관계 중 하나를 사용할 수 없는 경우에도 발생할 수 있습니다.
java.lang을 확인합니다.예외.로그 파일의 InInitializerError.스태틱 초기화 실패로 인한 NoClassDefFoundError는 매우 일반적입니다.
J2EE 환경에서 작업하는 경우 여러 Classloader 간에 클래스가 표시되지 않으면 java.lang도 발생할 수 있습니다.NoClassDefFoundError 자세한 내용은 예시와 시나리오 섹션을 참조하십시오.
가능한 해결 방법:
필요한 Java 클래스가 모두 응용 프로그램의 클래스 경로에 포함되어 있는지 확인합니다.가장 흔한 실수는 일부 외부 라이브러리에 의존하는 Java 응용 프로그램의 실행을 시작하기 전에 필요한 클래스를 모두 포함하지 않는 것입니다.
응용 프로그램의 클래스 경로가 올바르지만 응용 프로그램이 실행되기 전에 클래스 경로 환경 변수가 재정의됩니다.
상기의 예외에 대해 확인합니다.응용 프로그램의 스택트레이스에 InInitializerError가 표시되지 않습니다.
자원:
java.displays를 해결하는 3가지 방법.Java J2EE의 NoClassDefFoundError
java.displaces를 클릭합니다.No Class Def Found Error – No Class Def Found 오류 해결 방법
클래스 정의 없음 예외는 클래스 경로에서 원하는 클래스를 찾을 수 없는 경우에 발생합니다.
컴파일 시간 클래스:Java 컴파일러에서 클래스가 생성되었지만 실행 시 종속 클래스를 찾을 수 없습니다.
간단한 예를 하나 들어보겠습니다.
public class ClassA{
public static void main(String args[]){
// Some gibberish code...
String text = ClassB.getString();
System.out.println("Text is: " + text);
}
}
public class ClassB{
public static String getString(){
return "Testing some exception";
}
}
위의 두 개의 Java 소스 코드가 "NoClassDefinationFoundExceptionDemo"와 같은 폴더에 있다고 가정합니다.
이제 셸을 엽니다(Java가 이미 올바르게 설정되어 있는 경우).
"NoClassDefinationFoundExceptionDemo" 폴더로 이동합니다.
Java 소스 파일 javac ClassB javac 클래스 컴파일a
두 파일 모두 정상적으로 컴파일되어 ClassA.class 및 ClassB.class와 같은 폴더에 클래스 파일이 생성됩니다.
ClassPath를 현재 작업 디렉터로 덮어쓰기하기 때문에 다음 명령어 java - cp . ClassA를 실행하면 정상적으로 동작하여 화면에 출력이 표시됩니다.
현재 디렉토리에서 ClassB.class 파일을 삭제했다고 가정합니다.이제 명령어를 다시 실행합니다.java - cp . ClassA 이제 NoClassDefFoundException 이 나타납니다.ClassA에 종속된 ClassB가 클래스 경로(즉, 현재 작업 디렉토리)에 없습니다.
가 like음음음음음음음음음음음음음음 와 같은 패키지에 포함되어 있는 com.blahcode
은 리리 is is is is and and and and and and and라고 불립니다.Main
은 디렉토리 될 수 ./out/com/blahcode/Main.class
J IDEA 。
할는 "cmd"가 합니다.cd
포함한 com
서브디렉토리로 사용합니다.
cd out
java -classpath . com.blahcode.Main
을 사용하다 Android를 활성화 한 후 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」multidex
프로젝트가 더 이상 시작되지 않을 거라고요.
에 추가해야 할 특정 입니다.Application class
다른 무엇보다 먼저 호출된 거죠
MultiDex.install(this);
이 자습서에 따라 멀티덱스를 올바르게 활성화하십시오.https://developer.android.com/studio/build/multidex.html
이러한 행을 응용 프로그램 클래스에 추가해야 합니다.
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
NetBeans 프로젝트를 몇 달 동안 작업한 후 "Low Memory" 경보가 발생한 직후 갑자기 NoClassDefFoundError 메시지가 표시되었습니다.클린 리빌드를 실행해도 도움이 되지 않았지만 NetBeans를 모두 닫고 프로젝트를 다시 열면 오류 보고는 없었습니다.
이 답변은 java.lang에 고유합니다.서비스에서 NoClassDefFoundError가 발생했습니다.
저희 팀은 최근 서비스를 제공하는 rpm을 업그레이드한 후 이 오류를 발견했습니다.rpm과 그 안에 있는 소프트웨어는 Maven으로 구축되어 있었기 때문에 rpm에 포함되지 않은 컴파일 시간의 의존성이 있었던 것 같습니다.
그러나 조사 결과 발견되지 않은 클래스는 스택트레이스 내의 여러 클래스와 같은 모듈에 포함되어 있었습니다.게다가 이것은 빌드에 최근에 추가된 모듈도 아닙니다.이러한 사실들은 그것이 메이븐 의존성 문제가 아닐 수도 있음을 시사했다.
최종적인 해결책은 다음과 같습니다.서비스를 다시 시작합니다!
rpm 업그레이드로 인해 기본 JAR 파일에서 서비스 파일 핸들이 비활성화되었습니다.이 서비스는 메모리에 로드되지 않은 클래스를 확인하고 jar 파일 핸들 목록에서 해당 클래스를 검색했지만 클래스를 로드할 수 있는 파일 핸들이 비활성화되었기 때문에 찾지 못했습니다.서비스를 재시작하면 파일핸들이 모두 새로고침되어 rpm 업그레이드 직후 메모리 내에서 검출되지 않은 클래스가 로드됩니다.
제 프로젝트에서는 Chrome 브라우저와 Chromedriver가 호환되지 않는다는 문제가 해결되었습니다.브라우저도 열 수 없는 오래된 버전의 드라이버를 가지고 있었습니다.방금 두 가지 최신 버전을 다운로드 받았는데 문제가 해결되었습니다.
이 문제를 어떻게 발견했을까요?Selenium 네이티브 Firefox 드라이버를 사용하여 이전 버전의 FF를 응용 프로그램에 포함시켜 프로젝트를 실행했기 때문입니다.브라우저와 드라이버의 호환성이 문제라는 것을 알았습니다.
이와 같은 에러 메시지를 생성한 저와 유사한 문제를 가진 모든 사용자에게 도움이 되기를 바랍니다.
JAR 파일에서 클래스를 "시작"하는 경우 JAR 풀 경로로 시작해야 합니다.예를 들어, (매니페스트에 "기본 클래스"가 지정되지 않은 경우)
java -classpath "./dialer.jar" com.company.dialer.DialerServer
또한 다른 JAR 파일에 대한 종속성이 있다면 이러한 종속성을 해결할 수 있습니다.
- 이러한 JAR 파일(각 JAR 파일의 풀 패스)을 클래스 패스에 추가해 주세요.예를들면,
java -classpath "./libs/phone.jar;./libs/anotherlib.jar;./dialer.jar" com.company.dialer.DialerServer
- 또는 매니페스트에 "dependency JAR filess"를 추가하여 JAR 매니페스트를 편집합니다.이러한 매니페스트 파일은 다음과 같습니다.
Manifest-Version: 1.0
Class-Path: phone.jar anotherlib.jar
Build-Jdk-Spec: 1.8
Main-Class: com.company.dialer.DialerServer
- 또는 (소스 코드를 가진 개발자일 경우) Maven을 사용하여 *.pom 파일에 추가하여 매니페스트를 준비할 수 있습니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.company.dialer.DialerServer</mainClass>
<!-- Workaround for Maven bug #MJAR-156 (https://jira.codehaus.org/browse/MJAR-156) -->
<useUniqueVersions>false</useUniqueVersions>
</manifest>
</archive>
</configuration>
</plugin>
에서는 '비슷하다'를 사용한다는 점에 유의하시기 바랍니다.;
클래스 패스의 딜리미터로서 사용됩니다(Windows 플랫폼에 유효합니다).의 는, 를 치환합니다.;
타타에 :
.
예를들면,
java -classpath ./libs/phone.jar:./libs/anotherlib.jar:./dialer.jar
com.company.dialer.DialerServer
RCP(Rich Client Platform)라고도 하는 Eclipse 기반 애플리케이션을 개발하고 있습니다.리팩터링(플러그인에서 새로운 클래스로 클래스 이동) 후 이 문제가 발생하고 있습니다.
프로젝트 청소와 메이븐 업데이트는 도움이 되지 않았습니다.
이 문제는 번들 액티베이터가 자동으로 업데이트되지 않았기 때문에 발생했습니다.Manifest 아래 번들액티베이터 수동 갱신새로운 플러그인의 MF로 문제가 해결되었습니다.
여러 모듈을 사용하는 경우,
dexOptions {
preDexLibraries = false
}
를 참조하십시오.
Android studio를 사용한 Android 개발에도 같은 문제가 있었습니다.제공되는 솔루션은 일반적인 것으로, (적어도) 도움이 되지 않았습니다.
몇 시간 동안 연구한 끝에 다음과 같은 해결책을 찾았고, Android Studio를 사용하여 개발 중인 Android 개발자들에게 도움이 될 수 있습니다.
다음과 같이 설정을 변경합니다.
Preferences → Build, Execution, Deployment → Instant Run → *첫 번째 옵션을 선택합니다.
이 변화에 따라 저는 가동하고 있습니다.
이 사슬의 내 의견:
클래스 패스에 풀 패스가 포함되어 있는 것을 확인합니다(/home/user/lib/some_lib.jar
~/lib/some_lib.jar
, 은 여전히 수 있습니다.NoClassDefFoundError
모듈 외부에서 테스트 클래스 사용 안 함
해결방법은 없습니다.그냥 '컴파일 시 선물, 런타임 시 부재' 케이스의 또 다른 풍미일 뿐입니다.
다른 모듈에 있는 다른 테스트 클래스의 JUnit 테스트 클래스의 매우 편리한 방법을 사용하려고 했습니다.테스트 코드는 패키징된 jar에 포함되어 있지 않기 때문에, 이것은 아닙니다만, Eclipse의 유저 클래스에서는 볼 수 있는 것이었기 때문에, 깨닫지 못했습니다.
저의 해결책은 메서드를 프로덕션 코드의 일부인 기존 유틸리티 클래스에 배치하는 것이었습니다.
런타임 클래스 로더에 의해 로드된 클래스가 Java 루트 로더에 의해 이미 로드된 클래스에 액세스할 수 없는 경우 NoClassFoundError가 발생합니다.(Java에 따르면) 다른 클래스 로더가 서로 다른 보안 도메인에 있기 때문에 JVM은 루트 로더에 의해 이미 로드된 클래스를 런타임 로더 주소 공간에서 해결할 수 없습니다.
'java - javaagent: tracer.jar [Your 'java' ARGUESS]'를 사용하여 프로그램을 실행합니다.
로드된 클래스와 클래스를 로드한 로더 환경을 나타내는 출력이 생성됩니다.클래스를 해결할 수 없는 이유를 추적하는 것은 매우 유용합니다.
// ClassLoaderTracer.java
// From: https://blogs.oracle.com/sundararajan/entry/tracing_class_loading_1_5
import java.lang.instrument.*;
import java.security.*;
// manifest.mf
// Premain-Class: ClassLoadTracer
// jar -cvfm tracer.jar manifest.mf ClassLoaderTracer.class
// java -javaagent:tracer.jar [...]
public class ClassLoadTracer
{
public static void premain(String agentArgs, Instrumentation inst)
{
final java.io.PrintStream out = System.out;
inst.addTransformer(new ClassFileTransformer() {
public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
String pd = (null == protectionDomain) ? "null" : protectionDomain.getCodeSource().toString();
out.println(className + " loaded by " + loader + " at " + new java.util.Date() + " in " + pd);
// dump stack trace of the thread loading class
Thread.dumpStack();
// we just want the original .class bytes to be loaded!
// we are not instrumenting it...
return null;
}
});
}
}
나에게 효과가 있었던 솔루션: Android Studio를 재시작하기만 하면 됩니다.
클래스에 스태틱핸들러가 있는 경우는, 그것을 체크해 주세요.이 경우 루퍼가 있는 스레드에서만 정적 핸들러가 시작될 수 있으므로 다음과 같이 크래시가 트리거될 수 있으므로 주의하십시오.
먼저 단순한 스레드에 클래스의 인스턴스를 만들고 크래시를 파악합니다.
그런 다음 메인 스레드의 Class 필드 메서드를 호출하면 NoClassDefFoundError가 나타납니다.
테스트 코드는 다음과 같습니다.
public class MyClass{
private static Handler mHandler = new Handler();
public static int num = 0;
}
기본 활동의 onCreate 메서드에서 테스트 코드 부분을 추가합니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//test code start
new Thread(new Runnable() {
@Override
public void run() {
try {
MyClass myClass = new MyClass();
} catch (Throwable e) {
e.printStackTrace();
}
}
}).start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
MyClass.num = 3;
// end of test code
}
핸들러를 사용하여 간단하게 수정할 수 있습니다.init 핸들러에 대한 스레드:
private static Handler mHandler;
private static HandlerThread handlerThread = new HandlerThread("newthread");
static {
handlerThread.start();
mHandler = new Handler(handlerThread.getLooper(), mHandlerCB);
}
이 예외의 한 가지 오류 원인은 Proguard의 정의가 일관되지 않은 경우(예: 누락)일 수 있습니다.
- libraryJars "path.to.a.disc.jar.disc" (영어)
이것은 JAR 파일이 존재하지만 클린 및 빌드는 실패했을 때 컴파일과 실행이 정상적으로 작동하는 이유를 설명합니다.ProGuard 설정에서 새로 추가된 JAR 라이브러리를 정의해야 합니다!
ProGuard로부터의 오류 메시지는 JAR 파일이 전혀 없을 때 수신되는 유사한 Ant 메시지와 혼동하기 쉽기 때문에 실제로는 표준이 아닙니다.맨 아래에만 ProGuard에 문제가 있다는 작은 힌트가 있습니다.따라서 기존의 클래스 패스 오류 등을 검색하기 시작하는 것은 매우 논리적이지만 이는 헛수고입니다.
NoClassDefFound 예외는 실행 시 결과입니다.예를 들어 ProGuard의 일관성 결여를 기반으로 작성된 실행 가능한 JAR 파일입니다.일부에서는 ProGuard를 "지옥"이라고 부릅니다.
Eclipse용 FileSync 플러그인을 사용하여 Tomcat에서 디버깅을 실행할 수 있습니다.받았다NoClassFoundError
bin
워크스페이스 이클립스 => classes
metadata
extlib
이클립스 =>
C:\Users\Stuart\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps\myApp\WEB-INF\lib
Android Studio에서 최근 멀티덱스 지원을 추가한 경우:
// To support MultiDex
implementation 'com.android.support:multidex:1.0.1'
따라서 귀사의 솔루션은 애플리케이션이 아닌 MultiDex Application에서 확장됩니다.
public class MyApp extends MultiDexApplication {
내 환경에서는 유닛 테스트에서 이 문제가 발생했습니다.*.pom에 라이브러리 종속성을 하나 추가하면 수정됩니다.
예:
오류 메시지:
java.lang.NoClassDefFoundError: com/abc/def/foo/xyz/Iottt
POM 콘텐츠:
<dependency>
<groupId>com.abc.def</groupId>
<artifactId>foo</artifactId>
<scope>test</scope>
</dependency>
Git 브랜치 변경 후 이 에러가 발생하였습니다.Eclipse의 경우 org.eclipse의 .settings 디렉토리에 누락된 줄이 있었습니다.wst.common.component 파일.아래에서 보실 수 있듯.
Maven 설치를 통해 프로젝트 종속성을 복원하면 도움이 됩니다.
「 」를 사용하고 gradlew
접속하다./gradle/wrapper/gradle-wrapper.properties
and and 。distributionUrl
올바른 버전의 Gradle로 이동합니다.
JDK14 를 사용하고 있는 경우는, 다음의 조작을 실시합니다.
distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip
사용하는 Java 버전이 원인일 수 있습니다.Meteor와 Cordova의 경우, 일단 버전 8을 유지하십시오.
버전을 합니다.
/usr/libexec/java_home -V
버전8 Java 의 .8 의 합니다.
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home
되었는지 하세요.
echo $JAVA_HOME
계속해서 코딩하십시오.
Java 11 + Eclipse 솔루션:
입니다.module-info.java
Maven/Gradle을 사용하는 대신 JAR 파일을 수동으로 추가했습니다.
- 프로젝트 → 빌드 경로 → 빌드 경로 구성 → 라이브러리 탭을 마우스 오른쪽 버튼으로 클릭합니다.
- 문제가 있는 JAR 파일을 모듈 경로에서 제거합니다.
- 클래스 경로에 JAR 파일을 추가합니다.
자세한 내용은 Eclipse에서 확인할 수 있습니다. modulepasspath의 차이점은 무엇입니까?
"buid" 및 "out" 폴더를 삭제하고 IDE가 업데이트된 콘텐츠 파일로 이 폴더를 다시 빌드합니다.
언급URL : https://stackoverflow.com/questions/17973970/how-can-i-solve-java-lang-noclassdeffounderror
'programing' 카테고리의 다른 글
FireBase 데이터베이스에서 객체를 삭제하는 방법 (0) | 2022.07.10 |
---|---|
Vue.js.$set이 함수가 아닙니다. (0) | 2022.07.10 |
다른 문장에서 GCC의 __builtin_expect의 장점은 무엇입니까? (0) | 2022.07.10 |
동적 ID를 v-for loop + 문자열의 필드와 연결하는 방법은 무엇입니까? (0) | 2022.07.10 |
wildfly의 힙 메모리를 늘리는 방법 (0) | 2021.01.17 |