簡體   English   中英

在eclipse插件中,以編程方式將新的.java文件保存到工作區中的現有jar文件中

[英]in eclipse plug-in, programmatically save new .java files to an existing jar file in the workspace

我正在為Eclipse Standard/SDK Kepler編寫一個插件,以向本科生程序員在處理Java編程作業時提供診斷反饋。 該學生可以按自己希望的次數運行我的插件,以查看他的代碼是否觸發了有關他可能要更改的不良編程實踐的任何消息。

每次學生調用該插件時,我都需要在該學生的項目中保存所有.java文件的副本以及一個包含該插件產生的診斷反饋的文本文件。 我不想讓學生使用文件導出向導,因此我想出了如何使用org.eclipse.jdt.ui.jarpackagerJarPackageDataJarWriter3類以編程方式創建jar文件的方法。 這是我第一次保存文件,但我不想每次學生運行插件時都創建一個新的jar。 當學生第二次(第三,第四…)運行我的插件時,我想向已經制作的jar中添加更多文件,以便最終得到一個包含該學生使用情況的完整記錄的jar文件。我的插件。

JarWriter3創建一個新的jar文件,但不提供任何添加到已經存在的jar中的方法。 到目前為止,我都搜索了Eclipse文檔和stackoverflow歸檔文件,但沒有成功。 上一個問題的一個答案解釋了如何使用java.util.jar.JarEntryJarOutputStream類編寫jar文件,但是我認為如果確實有可以解決我的問題的方法,我應該堅持使用Eclipse類提供的功能。

JarWriter3本質上只是JarOutputStream一個相當薄的包裝器,例如,構造函數使用以下命令打開jar輸出流:

if (fJarPackage.usesManifest() && fJarPackage.areGeneratedFilesExported()) {
  Manifest manifest = fJarPackage.getManifestProvider().create(fJarPackage);
  fJarOutputStream = new JarOutputStream(new BufferedOutputStream(new FileOutputStream(fJarPackage.getAbsoluteJarLocation().toFile())), manifest);
} else
  fJarOutputStream = new JarOutputStream(new BufferedOutputStream(new FileOutputStream(fJarPackage.getAbsoluteJarLocation().toFile())));

所以我傾向於只使用標准的Java JarOutputStreamJarEntry

如果要將jar保存在工作區中,則在編寫jar以便使其能夠被Eclipse識別后,將需要調用IFile.refreshLocal

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM