قد يبدو إنشاء ملفات JAR برمجيًا باستخدام java.util.jar.JarOutputStream أمرًا بسيطًا، ولكن بعض الفروق الدقيقة يمكن أن تؤدي إلى مشكلات غير متوقعة. تستكشف هذه المقالة هذه المراوغات غير الموثقة وتوفر حلاً شاملاً لإنشاء ملفات JAR صالحة.
عند استخدام JarOutputStream، من الضروري الالتزام بالقواعد غير الموثقة التالية:
إليك مثال تفصيلي لكيفية إنشاء ملف JAR مع ملف بيان، مع معالجة المراوغات المذكورة أعلاه:
public void run() throws IOException {
// Prepare the manifest file
Manifest manifest = new Manifest();
manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
// Create a new JAROutputStream with the manifest
JarOutputStream target = new JarOutputStream(new FileOutputStream("output.jar"), manifest);
// Iterate over the source directory and add files to the JAR
add(new File("inputDirectory"), target);
// Close the JAROutputStream
target.close();
}
private void add(File source, JarOutputStream target) throws IOException {
// Prepare the entry path
String name = source.getPath().replace("\\", "/");
// Handle directories
if (source.isDirectory()) {
if (!name.endsWith("/")) {
name = "/";
}
// Create a directory entry with appropriate timestamps
JarEntry entry = new JarEntry(name);
entry.setTime(source.lastModified());
target.putNextEntry(entry);
target.closeEntry();
// Recursively add files within the directory
for (File nestedFile : source.listFiles()) {
add(nestedFile, target);
}
}
// Handle files
else {
// Create a file entry with appropriate timestamps
JarEntry entry = new JarEntry(name);
entry.setTime(source.lastModified());
target.putNextEntry(entry);
// Read and write the file contents to the JAR
try (BufferedInputStream 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();
}
}
}
من خلال اتباع هذه الإرشادات، يمكنك الآن بثقة إنشاء ملفات JAR صالحة برمجيًا، مما يضمن إمكانية الوصول إلى المكتبات والموارد الأخرى المضمنة فيها على النحو المنشود.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3