Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javapackager自定义.app捆绑包的资源目录_Java_Macos_Deployment_Dmg_Javapackager - Fatal编程技术网

使用Javapackager自定义.app捆绑包的资源目录

使用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是一个具

在macOS上,我使用Javapackager从我的
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
    文件夹中

  • 对两个文件进行签名,替换为您的值。提示:您可以从javapackager控制台输出中找到您的值。比如:

    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=
    可选择的
    
  • 当您使用开发人员ID分发应用程序时,请验证您的应用程序是否符合Gatekeeper策略,以模仿Gatekeeper的做法

    codesign--verify--deep--strict--verbose=2./Application.app

  • 在脚本中自动执行上述步骤 如果您使用(或可以使用)maven,您可以使用

    首先,您可以使用执行
    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