2010-12-01 6 views
7

* .jar 파일에 대한 빌드 경로 항목을 새로 작성하고이 클래스 경로 항목을 Eclipse 프로젝트의 빌드 경로에 추가하는 방법은 무엇입니까?Eclipse 프로젝트에 라이브러리를 프로그래밍 방식으로 추가

타겟 프로젝트를 자동으로 설정해야하는 플러그인이 있습니다. 따라서이 프로젝트는 라이브러리 가져 오기가 필요하며 마법사를 사용하여이 가져 오기를 자동으로 추가하려고합니다. 사용자는 특정 SDK의 위치를 ​​선택하기 만하면 일부 라이브러리가 대상 프로젝트와 연결되어야합니다.

그러나, 나는 몇 가지 참조를 발견

Importing libraries in Eclipse programmatically

How to add a folder to java build path as library, having multiple jars or entries in it?

불행하게도, 내가 클래스 IClasspathContainer, Javacore 대와 IJavaProject을 찾을 수있는 두 번째 솔루션을 구현하는 데 실패했습니다.

Eclipse Helios와 JDK를 사용하고 있습니다. 빌드 경로를 변경하기 위해 추가 라이브러리가 필요합니까? 아니면 jar 라이브러리를 프로그래밍 방식으로 가져 오는 간단한 솔루션이 있습니까?

감사합니다, 플로리안

답변

1

난 당신이 플러그인을 작성하고있다 있으리라 믿고있어 클래스 패스에 추가 여분의 항아리를 관리하는 플러그인이 필요합니다.

언급 한 것처럼 사용자 정의 클래스 경로 컨테이너를 만들어야합니다. 첫째,이 확장 점을 exending하여 클래스 패스 컨테이너 확장을 만듭니다

org.eclipse.jdt.core.classpathContainerInitializer 

그런 다음 org.eclipse.jdt.core.IClasspathContainer를 구현하는 클래스를 만들고 방금 만든 확장 점과 연결.

org.eclipse.jdt.core.IClasspathContainer 인터페이스를 찾을 수 없다는 것을 언급합니다. 플러그인이 MANIFEST.MF의 org.eclipse.jdt.core 플러그인을 참조하는지 확인해야합니다.

+0

다운로드 한 후 Java Developer Tools를 포함하는 것을 잊었습니다. 이 문제를 해결하기 위해 튜토리얼 aboth를 사용하여 사용자 정의 클래스 컨테이너를 작성했습니다. – Florian

1

Here 자바 프로젝트에 새로운 클래스 경로 항목과 클래스 경로 컨테이너를 정의하는 방법에 대한 예제가 있습니다. 나는이 질문을 읽는 누군가에게 도움이 될 것이라고 생각한다.

0

IJavaProject 등에 액세스하려면 plugin.xml로 이동하여 org.eclipse.jdt.core을 클래스 경로에 추가하십시오. 그런 다음 해당 패키지를 프로젝트로 가져올 수 있습니다. 앤드류 아이젠 버그가 언급 한 바와 같이, 당신은 당신의 플러그인의 MANIFEST.MF에 org.eclipse.jdt.core 플러그인 의존성을 포함 할 필요가

0
String projectName = "MyProject"; // project to add a library to 
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); 
IJavaProject jProject = JavaCore.create(project); 

for(File file : new File("path-to-some-directory-of-libraries-to-add").listFiles()){ 
    if(file.isFile() && file.getName().endsWith(".jar")){ 
     addProjectLibrary(jProject, file); 
    } 
} 

private static void addProjectLibrary(IJavaProject jProject, File jarLibrary) throws IOException, URISyntaxException, MalformedURLException, CoreException { 
    // copy the jar file into the project 
    InputStream jarLibraryInputStream = new BufferedInputStream(new FileInputStream(jarLibrary)); 
    IFile libFile = jProject.getProject().getFile(jarLibrary.getName()); 
    libFile.create(jarLibraryInputStream, false, null); 

    // create a classpath entry for the library 
    IClasspathEntry relativeLibraryEntry = new org.eclipse.jdt.internal.core.ClasspathEntry(
     IPackageFragmentRoot.K_BINARY, 
     IClasspathEntry.CPE_LIBRARY, libFile.getLocation(), 
     ClasspathEntry.INCLUDE_ALL, // inclusion patterns 
     ClasspathEntry.EXCLUDE_NONE, // exclusion patterns 
     null, null, null, // specific output folder 
     false, // exported 
     ClasspathEntry.NO_ACCESS_RULES, false, // no access rules to combine 
     ClasspathEntry.NO_EXTRA_ATTRIBUTES); 

    // add the new classpath entry to the project's existing entries 
    IClasspathEntry[] oldEntries = jProject.getRawClasspath(); 
    IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1]; 
    System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length); 
    newEntries[oldEntries.length] = relativeLibraryEntry; 
    jProject.setRawClasspath(newEntries, null); 
} 

참고.

programmatically refresh the project해야 할 수도 있습니다.

관련 문제