私は現在、Windowsソフトウェア(.exe)またはOS X app(.app)にバンドルされているプロジェクトをエクスポートして他のユーザーにデータを配布できるようにするJavaプロジェクトを進めていますワークステーション。 WindowsとOS Xの両方のソフトウェアは、圧縮されたzipファイルとして保存され、プロジェクトがエクスポートされた場合に圧縮されません。私の問題は、Windows上でOS Xアプリケーションを解凍すると、バンドルされたフレームワーク内のシンボリックリンクが壊れることです。これにより、アプリケーションの署名が破損し、OS Xでアプリケーションを起動するときに問題が発生します。Windowsファイルシステム上でunixシンボリックリンクファイルを処理する
私はApache Commons圧縮ライブラリを使用してパッケージの圧縮を解除しています。これによりシンボリックリンクとそのターゲットを検出できます。 OS Xでは、java.nio.file.Filesのメソッドを使ってシンボリックリンクを再作成することができますが、Windowsでは管理者権限が必要になります。これは、ソフトウェアを使用するための前提条件として追加することを躊躇しています(有効になっていても、私はこれがうまくいくとは確信していません。
私はリンクが壊れている理由を少しは理解していますが、私が正しく理解していれば、ファイルタイプがUnixシンボリックリンクのファイルタイプをサポートしていないため、リンクは通常のファイルOS Xで開くとシンボリックリンクとして認識されなくなるでしょう。
私の質問は、シンボリックリンクファイルをWindowsファイルシステムにビット単位でコピーするか、この情報を完全に保持しているかということです不可能?または、エクスポート方法を変更して既存のzipファイルにプロジェクトファイルを追加するだけで、シンボリックリンクの情報がターゲットマシン上で抽出されるまで保存される可能性があります。
ZipFile
の各ZipArchiveEntry
をループ現在のコードは以下の通りです:
byte data[] = new byte[BUFFER];
Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
while (entries.hasMoreElements()) {
ZipArchiveEntry zipEntry = entries.nextElement();
String destFilename = copyFolder + zipEntry.getName();
File destFile = new File(destFilename);
if (zipEntry.isUnixSymlink()) {
File target = new File(zipFile.getUnixSymlink(zipEntry));
try {
// Try to create symbolic link - currently only works with OS X
Files.createSymbolicLink(destFile.toPath(), target.toPath());
continue;
} catch (Exception e) {
System.out.println("Failed to create symbolic link: " +
destFile.getAbsolutePath() + " -> " +
target.getAbsolutePath());
}
}
// If file
int count;
FileOutputStream fos = new FileOutputStream(destFile);
try (BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER)) {
InputStream is = zipFile.getInputStream(zipEntry);
while ((count = is.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
}
}
WindowsでZIPを圧縮していないデバイスや、そのデバイスを後でMacに転送する方法など、これが使用されているワークフローについてもう少し詳しく教えてください。 Windowsでは、NTFSファイルシステムだけがシンボリックリンクをサポートしていて、FAT32はサポートしていないので、私は混乱します.WIPキーをWindowsマシン上でUSBキーにアンパックすると、USBキーがFATでフォーマットされているとシンボリックリンクが失われます。 NTFSでフォーマットされている場合、Macは(デフォルトで)それを読み取ることができません。 また、ディレクトリは任意のユーザがシンボリックリンクすることができます。ファイルをシンボリックリンクするには管理者権限のみが必要です。 – mihi
また、Windowsエクスプローラでファイル/シンボリックリンクをコピーすると、関連するファイルシステムに関係なく(NTFSからNTFSになっていても)コピーはシンボリックリンクされません。 – mihi
1)データを表示するソフトウェア(OS XおよびWindows版)をエクスポートする前に解凍します 2)エクスポートされたデータが表示ソフトウェアの隣に保存されます 3)全体が再びzipファイルに圧縮され、 FTPサーバーに送信されます。パッケージをダウンロードする方法についての説明は、電子メール と問題: で受信者に送信されます。4)OS XアプリケーションがWindowsで解凍→圧縮プロセス中に壊れてしまったため、OS Xのユーザーがソフトウェアを表示できません。 – pnkkr