数年前、私は小さな 私のファイルをバッチで再命名するのを助けるために. I actually created it with いずれにせよ、私は先週までそれを使用しませんでした. そして、過去にあったにもかかわらず、ネットワークのボリュームを再命名するのに効果がなかったことに驚きました. この短い投稿では、問題とその解決策を説明することを目指しています. KOTLIN GUI JVMフレームワークの違い 問題 UberJAR を起動したとき、ネットワークのボリュームは見えませんでした. フィールドにパスを入力した場合、サブノードは見えませんでした. 私はオンラインで解決策を検索し、アプリケーションにリソースを与えることを言及しました。 許可 : Java SDK または UberJAR をリストに追加しようとしましたが、方法は見つかりませんでした。 Local Network 設定 > プライバシー&セキュリティ > ローカルネットワーク ♪ 解決策 解決策はシンプルです:UberJARから通常のmacOSアプリを作成します。 あなたはそれを手で複製することができますが、私は怠け者ですが、そのためのツールがあります。 そんなツールです。 私が学んだツールの1つで、私はエクスタティックで、一度使って、次回まで忘れてしまいました。 特定の構造を持つフォルダー パッキング jpackage Naively Used 最初はこんな感じ: jpackage jpackage \ --type app-image \ #1 --input target \ #2 --name RenamerSwing \ #3 --main-jar renamer-swing-1.0-SNAPSHOT.jar #4 設定値 フォルダー to include アプリの名称 UBERJARへの道 それは動作し、macOS アプリを作成します. 結果としてのアプリを起動し、OS がローカル ネットワークへのアクセスを許可するかどうかを尋ねます. しかし、 コピー全般 アプリにフォルダーのコンテンツを含むだけでなく、オリジナルJAR、クラスだけでなく、その他のコンテンツも含まれています。 jpackage target 建設の改善 私は呼び出しの代わりにMavenビルドを改善することにしました。 マニュアル jpackage 最初のステップは、UberJAR を空のフォルダに移動することです。 「S」 . jpackage input <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>copy-jar-for-jpackage</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/jpackage-input</outputDirectory> <resources> <resource> <directory>${project.build.directory}</directory> <includes> <include>${project.build.finalName}.jar</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> 次のステップは実際に包装するMavenプラグインを見つけることです。 ♪見つけた 以下は、それをどのように使うかです。 jpackage タグ : パッケージ パッケージ パッケージ <plugin> <groupId>org.panteleyev</groupId> <artifactId>jpackage-maven-plugin</artifactId> <version>1.6.5</version> <configuration> <name>RenamerSwing</name> <!--1--> <appVersion>${project.version}</appVersion> <vendor>Nicolas Fränkel</vendor> <destination>target</destination> <input>target/jpackage-input</input> <!--2--> <mainJar>${project.build.finalName}.jar</mainJar> <!--3--> <mainClass>${main.class}</mainClass> <type>APP_IMAGE</type> <!--4--> </configuration> <executions> <execution> <id>jpackage</id> <phase>package</phase> <goals> <goal>jpackage</goal> </goals> </execution> </executions> </plugin> Appの名前 前のステップで作成したフォルダを指します。 主なJARへの道 設定値 パラメータはコマンドラインオプションを模することに注意してください。 タッチ終了 完成度はバージョンとアプリのサイズの2つです。 まずは、上記のバージョンから始めましょう。上記の設定は、 The build fails if it's suffixed with ビルドが失敗する場合 , as a Mac app version must follow the pattern. Mac app version must follow the pattern. Mac app version must follow the pattern. これを修正するために、我々は利用できる。 など、いくつかの目標を掲げている。 これにより、Mavenのバージョンを複数のプロパティに分割します。 ${project.version} -SNAPSHOT major.minor.bugfix build-helper-maven プラグイン バージョン Parse <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.6.0</version> <executions> <execution> <id>parse-version</id> <phase>initialize</phase> <goals> <goal>parse-version</goal> </goals> </execution> </executions> </plugin> バージョンの行を以下に置き換えることができます: <appVersion>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}</appVersion> 二つ目の改善は、最終的なアプリサイズです。上記の構成は、私のマシンで160MBのアプリを生成します。JVMベースのアプリに関しては全く関係ありませんが、それも素晴らしいものではありません。 レベルの 下は、 JRE を作成します. アプリは自己コンテンツです。 jpackage jlink jlink 構成されたすべてのモジュールを使用するか、またはすべてのデフォルトを使用します。それほど良い側面では、私たちはいずれも構成しませんでした。必要なモジュールを追加することで、私たちはアプリのサイズを半分にし、82MBに減らすことができます。 jpackage <plugin> <groupId>org.panteleyev</groupId> <artifactId>jpackage-maven-plugin</artifactId> <version>1.6.5</version> <configuration> <name>RenamerSwing</name> <appVersion>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}</appVersion> <vendor>ch.frankel.blog</vendor> <destination>target</destination> <input>target/jpackage-input</input> <mainJar>${project.build.finalName}.jar</mainJar> <mainClass>${main.class}</mainClass> <type>APP_IMAGE</type> <addModules> <addModule>java.base</addModule> <addModule>java.desktop</addModule> <addModule>java.logging</addModule> </addModules> </configuration> この時点で、アプリを Mac に移動できます。 フォルダー. You can also customize it further with icons, etc. As for me, it's good enough for my purposes. あなたはまた、アイコンなどでそれをさらにカスタマイズすることができます。 Applications 結論 この投稿では、現在の macOS セキュリティ モデルにより、リモート ボリュームでファイルの名前を変更できない UberJAR から始めました. To make it work, we wrapped the UberJAR in a native macOS app. Then, we improved the situation with explicit modules by cutting the size in half. この記事の完全なソースコードはGitHubでご覧いただけます: https://github.com/ajavageek/renamer-swing?embedable=true To go further: macOS でファイルへのアプリケーションアクセスを制御する macOS Appの解剖学 パッキング オリジナルの投稿 A Java Geek on January 25th, 2025 ・Java Geek