我正在尝试以编程方式创建一个 JAR 文件作为我们产品的功能之一。我正在使用下面的代码来实现:
//Assume all necessary imports and variables are declared
FileOutputStream fOut = new FileOutputStream(jarFilePath);
Manifest manifest = new Manifest();
manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
JarOutputStream jarOut = null;
FileInputStream reader = null;
for(String pathToJava:pathToJavaFile) {
jarOut = new JarOutputStream(fOut,manifest);
reader = new FileInputStream(pathToJava);
jarOut.putNextEntry(new ZipEntry(pathToJava));
}
while ((readCount = reader.read(buffer, 0, bufferSize)) >= 0) {
if(readCount > 0) {
jarOut.write(buffer,0,readCount);
}
}
这完美地工作,我能够创建 jar 文件。问题出在这一行:
jarOut.putNextEntry(new ZipEntry(pathToJava));
假设如果pathToJava
有一个类似的值c:/foo/bar/FooBar.java
,它会在 jar 文件中创建一个文件夹c: --> foo --> bar
,然后将 FooBar.java 放入其中。我想要的是我应该能够把它FooBar.java
放在特定的文件夹中,比如sources
?
无论如何我可以配置JarOutputStream
将文件放在特定文件夹中吗?或者我还有其他选择吗?我可以以编程方式使用java -jar
,但我退后一步,因为查找用户是否安装了 jdk 的复杂性。任何人都可以指导我吗?