繁体   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