2012-11-10 9 views
0

여기 내 목표 : 런타임시 여러 파서/렉서를 생성하고 파싱 및 렉싱을 위해 이들의 인스턴스를로드하려면 SableCC를 사용하십시오. 프로그래밍 방식으로 생성 된 .jar 파일로 클래스로드하기

그래서 나는 나의 단계가 될 것이다 생각 :

  1. 이 SableCC를 사용하여 .java 파일을 생성합니다. 이 일을 다했다고 생각합니다.

  2. .java 파일을 .class 개의 파일로 컴파일하십시오. 나는 JavaCompiler을 사용하여 이것을했다. 나는 이것이 잘 작동했다고 생각한다.

  3. 파일 구조를 유지하면서 생성 된 파일을 .jar 파일에 넣습니다. 나는 이것을 this을 템플릿으로 사용했다. JarBrowser을 사용하여 .jar 파일을 검사하면 패키지의 파일 구조가 보존되었음을 알 수 있습니다. Jar Catalog를 사용하면 일반 .jar 파일과 동일하게 보입니다. 그러나 JarBrowser를 사용하면 내 항아리가 "CLASSPATH 카탈로그"아래에 표시되지 않습니다. 이로 인해 내 .jar 파일이 올바르게 작성되지 않는다고 생각됩니다.

  4. .jar 파일을 URLClassLoader의 인스턴스로로드하십시오. Class.forName()을 사용하여로드하려고하지만 작동하지 않는 것 같습니다.

4 단계를 수행 할 때마다 java.lang.ClassNotFoundException이 표시됩니다. 왜이 사람이 어떤 아이디어를 가지고 있습니까?

+0

가능한 복제본 [런타임시 Jars를 동적으로로드하는 방법] (http://stackoverflow.com/questions/60764/how-should-i-load-jars-dynamically-at-runtime) –

+0

@EugeneRetunsky : 나는 그 질문에 이미 갔다. 거의 동일한 코드를 사용하고 있지만 작동하지 않습니다. 따라서 다른 질문 : P –

+0

당신이 이것을 시도 : http://stackoverflow.com/questions/194698/how-to-load-a-jar-file-at-runtime? –

답변

1

파일/디렉토리 이름 앞에 슬래시가 붙은 것으로 나타났습니다. 파일 이름에서 상위 디렉토리를 잘라내었지만 상위 디렉토리의 슬래시를 고려하지 않았으니 /dir1/file1dir1/file1 대신 완료되었습니다. 나는 JAR 파일이 까다 롭다고 생각합니다.

+0

이것을 허용으로 표시하십시오. – Vulcan

+0

"내일 자신의 대답을 수락 할 수 있습니다. (기각하려면이 상자를 클릭하십시오.)"미안하다 :/ –

+1

아, 저기, 기다리는 시간이 있다는 것을 몰랐습니다. 할 수있을 때 수락 된 것으로 표시해야합니다. :) – Vulcan