以前に他のファイルから抽出された(すでに実行された)一連のファイルをjarに追加したいと思います。これらのファイルは、JAR内のファイルを上書きします。それを行うための最も効率的な方法は何ですか?私はそれが速い必要があります。ありがとうございました!
53468 次
9 に答える
21
jar -u file.jar file1 file2 file3 ...
于 2012-09-02T21:09:07.950 に答える
20
jar -uf my.jar file1 file2...
jar -uf my.jar dir/
または混合
jar -uf my.jar file dir/
于 2017-06-23T16:08:35.030 に答える
10
JARファイルはZIPファイルです。覚えておいてください。
いくつかのZIPライブラリを使用するだけです。
于 2012-09-02T21:10:46.870 に答える
4
既存の回答に追加するために、少なくとも1つの特殊なケースがあります。いわゆる実行可能JARファイルです。別のJARファイルを依存関係として追加すると(jarまたはzipのどちらを使用する場合でも)、埋め込まれたファイルが圧縮されていると文句を言います。
Caused by: java.lang.IllegalStateException: Unable to open nested entry 'BOOT-INF/lib/file.jar'. It has been compressed and nested jar files must be stored without compression. Please check the mechanism used to create your executable jar file
0
これに対する解決策は、jarオプションを使用することです。
jar uvf0 myfile.jar BOOT-INF/lib/file.jar
通常のクラスファイルにはこれは必要ありません。
于 2020-04-03T09:51:24.293 に答える
3
zip file.jar file1 file2 file3
MacOs10.7.5で動作します
于 2013-04-12T21:42:02.730 に答える
2
//Add a file in jar in a particular folder
jar uvf <jar file name> <file to be added> <folder name inside jar>
于 2019-07-31T07:30:03.347 に答える
1
既存の回答を拡張すると、jarオプションは、独自のフォルダーにあるファイルを追加するときに非常に便利であり、パスをフラット化することができます。-C
$ jar uf jar-file -C /path/to/my_jars/ this_useful.jar
最終的には、JARのルートにthis_useful.jarが含まれることになります。
$ jar tf jar-file | grep this_useful.jar
this_useful.jar
于 2018-10-22T14:55:59.657 に答える
1
誰かがプログラムで答える必要があるなら、ここにあります。
private static void createJar(File source, JarOutputStream target) {
createJar(source, source, target);
}
private static void createJar(File source, File baseDir, JarOutputStream target) {
BufferedInputStream in = null;
try {
if (!source.exists()) {
throw new IOException("Source directory is empty");
}
if (source.isDirectory()) {
// For Jar entries, all path separates should be '/'(OS independent)
String name = source.getPath().replace("\\", "/");
if (!name.isEmpty()) {
if (!name.endsWith("/")) {
name += "/";
}
JarEntry entry = new JarEntry(name);
entry.setTime(source.lastModified());
target.putNextEntry(entry);
target.closeEntry();
}
for (File nestedFile: source.listFiles()) {
createJar(nestedFile, baseDir, target);
}
return;
}
String entryName = baseDir.toPath().relativize(source.toPath()).toFile().getPath().replace("\\", "/");
JarEntry entry = new JarEntry(entryName);
entry.setTime(source.lastModified());
target.putNextEntry(entry); in = new BufferedInputStream(new FileInputStream(source));
byte[] buffer = new byte[1024];
while (true) {
int count = in .read(buffer);
if (count == -1)
break;
target.write(buffer, 0, count);
}
target.closeEntry();
} catch (Exception ignored) {
} finally {
if ( in != null) {
try { in .close();
} catch (Exception ignored) {
throw new RuntimeException(ignored);
}
}
}
}
于 2019-12-16T06:56:45.887 に答える
-1
String cmd = "jar uvf " + "jarName" + " " + "Filename";
System.out.println(cmd);
try {
Process p = Runtime.getRuntime().exec(cmd);
}
catch (Exception ex) {
}
于 2019-07-31T06:16:26.443 に答える