使用Javapackager自定义.app捆绑包的资源目录
在macOS上,我使用Javapackager从我的使用Javapackager自定义.app捆绑包的资源目录,java,macos,deployment,dmg,javapackager,Java,Macos,Deployment,Dmg,Javapackager,在macOS上,我使用Javapackager从我的Application.jarJava归档文件中创建Application.app捆绑包(称为磁盘映像): javapackager \ -deploy \ -native image \ -srcfiles Application.jar \ -outdir dist \ -outfile Application \ -appclass Application 生成的Application.appbundle是一个具
Application.jar
Java归档文件中创建Application.app
捆绑包(称为磁盘映像):
javapackager \
-deploy \
-native image \
-srcfiles Application.jar \
-outdir dist \
-outfile Application \
-appclass Application
生成的Application.app
bundle是一个具有以下布局的目录:
Application.app
|--Contents
|--Info.plist
|--PkgInfo
|--Java
| |--Application.jar
|--MacOS
| |--Application
|--Resources
但是,我的文件系统中有一些.lproj
目录(其中包含InfoPlist.strings
文件,用于本地化Info.plist
文件的一些字符串,参见苹果的开发者),需要复制到应用程序.app
布局的资源
目录中,如下所示:
Application.app
|--Contents
|--Info.plist
|--PkgInfo
|--Java
| |--Application.jar
|--MacOS
| |--Application
|--Resources
|--en.lproj
|--InfoPlist.strings
|--fr.lproj
|--InfoPlist.strings
我如何告诉Javapackager这样做?(我不想在应用程序.app
捆绑包创建后复制.lproj
目录,因为它会破坏其签名。)作为一种解决方法:
Info.plist
文件放入package/macosx/
(如果不存在则创建)中,以便javapackager在执行过程中提取该文件,然后像平常一样运行javapackager*.lproj/InfoPlist.strings
结构复制到应用程序.app/Contents/Resources
文件夹中codesign-s“开发者ID应用程序:您的公司(A1234ABCDE)”--前缀com.domain/Application.app/Contents/Resources/en.lproj/InfoPlist.strings
对fr.lproj
codesign--verify--strict--verbose=2./Application.app/Contents/Resources/en.lproj/InfoPlist.strings
应输出:
/Application.app/Contents/Resources/en.lproj/InfoPlist.strings:在磁盘上有效
/Application.app/Contents/Resources/en.lproj/InfoPlist.strings:满足其指定要求
对fr.lproj
Contents/\u CodeSignature/
codesign-s“开发者ID应用程序:您的公司(A1234ABCDE)”--前缀为com.domain--force--deep./Application.app
应输出:
/Application.app:替换现有签名
更新后的CodeResources文件应该包含en.lproj
和fr.lproj
的条目,如:
<key>Resources/en.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
CUsP4OMChUrxMRr6uFtSA7pFejs=
</data>
<key>optional</key>
<true/>
</dict>
Resources/en.lproj/InfoPlist.strings
搞砸
CUsP4OMChUrxMRr6uFtSA7pFejs=
可选择的
codesign--verify--deep--strict--verbose=2./Application.app
jlink
/javapackage
步骤,完成后(在package
阶段),将缺少的信息复制到目标文件夹
Maven为您实现自动化,您无需手动执行这些步骤
例如:
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>jlink</executable>
<!-- optional -->
<workingDirectory>/tmp</workingDirectory>
<arguments>
<argument>--compress=2</argument>
<argument>--strip-debug</argument>
...
</arguments>
[...]
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptors>
<descriptor>src/assembly/copy-resources.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</project>
[...]
[...]
org.codehaus.mojo
execmaven插件
1.6.0
执行官
jlink
/tmp
--压缩=2
--带调试
...
[...]
maven汇编插件
3.1.0
src/assembly/copy-resources.xml