2009-09-04 1 views
2

CIS (Content Integration Suite)를 통해 저장소 응용 프로그램에 문서를 업로드하는 Java 응용 프로그램을 만들었습니다. 이 응용 프로그램은 RAD에서 성공적으로 실행되지만 Unix 환경에서 실행 가능한 jar로 NoClassDefFoundError를 얻습니다. 내 로컬 컴퓨터에서 클래스를 찾을 수 없으며 인터넷에있는 클래스에 대한 참조가 없습니다.Java 응용 프로그램 NoClassDefFoundError

매니페스트에는 필요한 jar 파일 및 기본 클래스의 클래스 경로가 들어 있습니다.

아무도 도와 줄 수 있습니까?

Fri Sep 04 16:47:25 EDT 2009 : StandardBatchApplication startup() completed. 
java.lang.NoClassDefFoundError: com.stellent.cis.support.spring.ResourceHelper 
     at com.stellent.cis.common.classloader.IsolatedJarClassLoader$TemporaryF 
     at com.stellent.cis.common.classloader.IsolatedJarClassLoader$TemporaryF 
     at com.stellent.cis.common.classloader.IsolatedJarClassLoader$TemporaryF 
     at com.stellent.cis.common.classloader.IsolatedJarClassLoader.<clinit>(I 
     at java.lang.J9VMInternals.initializeImpl(Native Method) 
     at java.lang.J9VMInternals.initialize(J9VMInternals.java:196) 
     at com.stellent.cis.impl.CISApplicationFactory.getCisClassloader(CISAppl 
     at com.stellent.cis.impl.CISApplicationFactory.getCisApplication(CISAppl 
     at com.stellent.cis.impl.CISApplicationFactory.initialize(CISApplication 
     at com.lowes.ipt.edi.processor.CISApp.initialize(CISApp.java:48) 
     at com.lowes.ipt.edi.processor.EDItoEDAMUploadProcessor.main(EDItoEDAMUp 
Caused by: java.lang.ClassNotFoundException: com.stellent.cis.support.spring.Res 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:496) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:631) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:597) 
     ... 11 more 

업데이트 : CIS를 다루는 jar 파일이 하나뿐입니다. 나는 병을 들여다 보았습니다. CIS 클래스를 가진 다른 RAD 기본 클래스에는 익숙하지 않습니다. 이것은이 클래스뿐만 아니라 webservices.jar에 포함 된 클래스에서도 발생합니다. 클래스를 볼 수 있으며 클래스 경로의 일부입니다. 경로에서 Jar 파일을 제거하면 다른 누락 클래스에 대해 불만이 생기기 때문입니다. 나는 그것을 내 길에 되돌려 놓으면 프로그램에서 더 나아가서 같은 오류를줍니다.

답변

0

이 문제는 UNIX의 tmp 디렉토리에 대한 사용 권한 때문에 발생합니다. CIS API는 실행을 위해 필요한 파일/클래스를 작성하고 저장하기 위해 tmp 디렉토리를 사용합니다. 자체 ID로 프로세스를 실행했기 때문에 wsadmin에 의해 작성된 tmp 파일에 액세스 할 수 없었습니다. 이 문제를 해결하려면 프로세스를 wsadmin으로 실행해야합니다.

0

누락 된 클래스는 아마도 원격 시스템이 아닌 로컬 시스템에 설치된 일부 JAR 파일에 있습니다. 또는 더 많은 가능성이 있습니다 - 로컬 컴퓨터의 다른 위치에서 제거 컴퓨터에 설치됩니다 (원격 컴퓨터가 Unix 시스템이고 로컬이 Windows 상자 인 경우 예상됩니다).

빌드하는 JAR의 MANIFEST.MF 파일에 설정된 클래스 경로는 원격 시스템에서 관련된 모든 JAR을 찾기위한 클래스 경로를 지정해야합니다. JAR이 설치된 위치를 찾은 다음 해당 경로를 매니페스트에 추가해야합니다 classpath. 유닉스 컴퓨터의 JAR 파일은/usr/share/java에 설치되는 경우가 많지만, CIS에 익숙하지 않아 JAR 파일이 정상적으로 배포되는지 알지 못하기 때문에 더 이상 말할 수 없습니다.