0

ライブラリを参照ライブラリにプログラムで追加しようとしています。これが私のコードです:

String filename = "myfile.jar";
InputStream is;
try {
   is = new BufferedInputStream(new FileInputStream("D:\\" + filename));
   IFile file = project.getFile(filename);
   file.create(is, false, null);

   IPath path = file.getFullPath();                         
   IClasspathEntry[] cpe = javaProject.getRawClasspath();
   List<IClasspathEntry> libraries = Arrays.asList(cpe);                    
   libraries.add(JavaCore.newLibraryEntry(path, null, null));
   try {
        javaProject.setRawClasspath(libraries.toArray(new IClasspathEntry[libraries.size()]), null);
   } catch (JavaModelException e1) {
        e1.printStackTrace();
   }
 } catch (FileNotFoundException e) {
   e.printStackTrace();
 }

しかし、結果は次のようです。

ここに画像の説明を入力


更新 1。

ここにクラスパスがあります。.classpath変わっていないようです。

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con"  path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
    <classpathentry kind="output" path="bin"/>
</classpath>
4

3 に答える 3

1

問題は次の行にあると思われます。

IPath path = file.getFullPath();

代わりに次の行を試してください。

IPath path = file.getProjectRelativePath();

プロジェクトのビルド パスを変更する際の問題をデバッグする良い方法は、プロジェクト ルートの .classpath ファイルを確認することです。このファイルは、コードの正確な効果を示します。次に、同等の操作を手動で実行したときに得られる効果と比較します。

于 2012-08-06T15:03:00.407 に答える
0

カスタム ライブラリをプロジェクトに追加する方法のスニペットを次に示します。アイデアを得るのに役立つことを願っています。

// configure class path, source dir and output dir
        final IPath outputpath = project.getFullPath().append(CLASSES);
        final IClasspathEntry classpath1 = JavaCore.newSourceEntry(project.getFullPath().append(customPath));
        final IClasspathEntry[] defaultClasspath = org.eclipse.jdt.ui.PreferenceConstants.getDefaultJRELibrary();
        final IClasspathEntry[] newClasspath = new IClasspathEntry[defaultClasspath.length + 2];
        System.arraycopy(defaultClasspath, 0, newClasspath, 0, defaultClasspath.length);
        newClasspath[defaultClasspath.length] = classpath1;
        javaProject.setRawClasspath(newClasspath, outputpath, null);
于 2012-08-06T08:08:49.020 に答える
0

このソリューションは機能します:

IClasspathEntry[] entries = javaProject.getRawClasspath();
IClasspathEntry[] newEntries = new IClasspathEntry[entries.length + 1];

 System.arraycopy(entries, 0, newEntries, 0, entries.length);

 // add a new entry using the path to the container
 //Path junitPath = new Path("D:\\jarscan.jar");
 IClasspathEntry junitEntry = JavaCore.newLibraryEntry(new Path("D:\\jarscan.jar"), null, null, false);
 newEntries[entries.length] = junitEntry;
 javaProject.setRawClasspath(newEntries, null);

詳細はこちら

于 2012-08-06T18:48:32.080 に答える