2012-01-27 3 views
3

JOGL을 사용하는 Java 프로젝트가 있으므로 플랫폼마다 다른 기본 라이브러리를 포함해야합니다. 이제 올바른 라이브러리를 자동으로 선택하도록 Eclipse 프로젝트를 설정하려고합니다. .classpath 파일에서 당신이 기본 위치를 지정할 수 있습니다 : 곱셈 classpathentries는 기본 위치를 지정하는 경우다른 플랫폼 용 기본 라이브러리가있는 Java 프로젝트

<classpathentry kind="lib" path="lib/jogl/jar/jogl.all.jar"> 
    <attributes> 
     <attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="de.yogularm.desktop/lib/jogl/windows-amd64"/> 
    </attributes> 
</classpathentry> 

를, Eclipse는 다른 플랫폼에 대한 라이브러리를로드하려고 시도하고 실패합니다.

어떻게 이클립스가 디렉토리를 선택하게 할 수 있습니까? 나는이 프로젝트를 공유하고 더 많은 개발자들을 위해 가능한 한 쉽게 설치하기를 원한다.

+0

시도해 보셨습니까? http://stackoverflow.com/questions/3618425/how-to-configure-eclipse-project-to-compile-both-on-windows-and-linux? – Viruzzo

+0

좋은 대안 이겠지만 64 비트와 32 비트 시스템 모두에 대한 지원이 부족합니다. – Yogu

답변

4

(.classpath_Windows는 .classpath_Linux 등) 및 다음 ".classpath"라는 이름 필요한 버전 (승/린/맥)에 심볼릭 링크를 만들 수는
문제는 whan 당신이 원하는 나타납니다 .classpath_XXXXXXX 내부의 항목을 변경하면 다른 .classpath 파일을 업데이트해야합니다.

+0

고마워요, 저 한테 해줬습니다. – Yogu

-1

내가 틀릴 수도 있지만, 네이티브 라이브러리는 DLL, 공유 객체 등과 같은 것으로 클래스 패스를 사용하지 않는다고 생각합니다. 각 환경에는 PATH 변수 또는 이와 유사한 것이 있습니다. 기본 라이브러리를 포함해야합니다. 사용자는 Eclipse 내에서 또는 환경 변수를 통해 일부 구성을 할 수 있습니다.

+1

기본 경로는 * classpath *에 포함되지 않으며 classpath 파일에서 방금 선언됩니다. Eclipse는 디버깅 할 때 PATH 변수에이 변수를 사용합니다. 단 하나의 플랫폼 만 사용하면 문제는 없으며 반드시 의도 된 방법입니다. – Yogu

+0

좋은 지적 - 분명히 충분히 신중하게 질문을 읽지는 않았습니다. – user888379

-1

라이브러리는 클래스 경로, 시스템 경로 및 속성 java.library.path 내에서 검색되지 않습니다.

ClassLoader 구현, 특히 findLibrary(..)loadLibrary(..) 메서드가 사용자 정의 될 수 있습니다. 이렇게하면 탐지 된 OS를 기반으로 적절한 라이브러리를 선택할 수 있습니다.

3

Eclipse에 원하는 기능이 없습니다. 그래서, 당신은 자바에서 그것을 할 수 있습니다.

System.loadLibrary을 호출하는 대신 System.load으로 전화하십시오. 이를 위해서는 현재 플랫폼을 기반으로 올바른 경로 이름을 계산하는 코드를 작성해야합니다. -D를 사용하여 현재 플랫폼이 무엇인지 말하거나 파일에서 값을 전달해야합니다.

이것은 방정식에서 java.library.path을 제거합니다.

JNI 라이브러리에 종속성이있는 경우 PATH, LD_LIBRARY_PATH 또는 DYLD_LIBRARY_PATH도 설정해야합니다. https://github.com/bimargulies/jni-origin-testbed을 더 이상 보지 않는 한. 그러나 Windows의 경우 지연 로더와 함께 필요한 작업이 없습니다. 당신은 여러 .classpath 파일을 만들 수 있습니다

+0

매우 흥미로운 대답입니다. – Yogu

+0

알다시피, 나는 참조 된 라이브러리의 코드를 변경해야하며, 이것은 실행 가능하지 않습니다. 그러나 내가 독자적으로 도서관을 쓴다면 당신의 대답은 완벽 할 것입니다. – Yogu

+0

참조 된 라이브러리의 코드를 변경해야하는 이유는 무엇입니까? 내가 이것을했을 때 나는하지 않았다. – bmargulies

관련 문제