在 JDK9 上的 Maven 构建期间,Ant 无法创建 .pkg 文件

Ant fails to create .pkg file during maven build on JDK9

我正在将 javaFx 应用程序的构建过程从 JDK8 升级到 JDK9,但我 运行 遇到了问题。

构建过程 运行 通过 Maven 并使用 Ant 将 jar 文件捆绑到 pkg 文件中(在 Mac Osx 中)并在 [=42 中捆绑到 MSI 文件中=].

Maven 版本:3.5.2。蚂蚁版本:

我在构建执行期间遇到异常:

com.oracle.tools.packager.ConfigException: java.lang.RuntimeException: File /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/jmods does not belong to <our project binaries folder>
    at jdk.packager/com.oracle.tools.packager.mac.MacPkgBundler.validate(MacPkgBundler.java:568)
    at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateNativeBundles(PackagerLib.java:370)
    at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateDeploymentPackages(PackagerLib.java:348)
    at com.sun.javafx.tools.ant.DeployFXTask.execute(DeployFXTask.java:310)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at jdk.internal.reflect.GeneratedMethodAccessor30.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:435)
    at org.apache.tools.ant.Target.performTasks(Target.java:456)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
    at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
    at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:441)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at jdk.internal.reflect.GeneratedMethodAccessor30.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:435)
    at org.apache.tools.ant.Target.performTasks(Target.java:456)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
    at org.apache.maven.plugin.antrun.AntRunMojo.execute(AntRunMojo.java:313)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:955)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:290)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:194)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

在 maven 中,我使用了以下插件(全部升级到最新版本):

构建在 fx:deply 任务中失败,该任务在我们的 build.xml 中配置如下:

<fx:deploy width="600" height="400" install="true"
        verbose="true" nativeBundles="${native.bundles}" 
        outdir="${dist.dir}/bundle" outfile="${app.name}" >

        <fx:application id="${app.id}" name="${app.name}" mainClass="${javafx.main.class}" version="${app.version}" />

        <fx:preferences shortcut="true" menu="false" install="true"/>
        <fx:secondaryLauncher 
            mainClass="com.pingidentity.proxy.proxyhelper.ProxyExternalEntryPoint"
            name="ProxyHelperSetup"/>
        <fx:secondaryLauncher 
            mainClass="com.pingidentity.proxy.proxyhelper.AutoUpdatesExternalEntryPoint"
            name="AutoUpdatesSetup"/>
        <fx:secondaryLauncher
            mainClass="com.pingidentity.proxy.proxyhelper.MigrationHelper" 
            name="MigrationHelperSetup"/>
        <fx:resources >
            <fx:fileset dir="${dist.dir}" includes="${jar.name}"/>
            <fx:fileset dir="${dist.dir}/lib" />
            <fx:fileset dir="${resources.dir}"  type="license" includes="license.rtf"/>
                <fx:fileset dir="${resources.dir}"  type="license" includes="testwelcome.rtf"/>
            <fx:fileset dir="${basedir}/UnlimitedJCEPolicy" includes="*.jar" />
            <!-- the attr os="mac" not works, so I created emtpy folder in case of windows -->
            <fx:fileset dir="${dist.dir}/uninstaller" />
        </fx:resources>
        <fx:info  title="${app.name}" vendor="${vendor}" category="public.app-category.productivity">
        </fx:info>

        <fx:platform>
            <fx:jvmarg value="-Xms128m"/>
            <fx:jvmarg value="-Xmx384m"/>
            <fx:jvmarg value="-Xmn64m"/>
        </fx:platform>

        <fx:bundleArgument arg="mac.CFBundleVersion" value="${app.version}"/>
        <fx:bundleArgument arg="mac.signing-key-developer-id-app" value="Developer ID Application: Ping Identity Corporation (6U3RF4C84N)"/>
        <fx:bundleArgument arg="mac.signing-key-developer-id-installer" value="Developer ID Installer: Ping Identity Corporation (6U3RF4C84N)"/>
            <fx:bundleArgument arg="mainJar" value="${dist.dir}/${jar.name}" />

    </fx:deploy>

有什么想法可以让 JDK 9 工作吗?

我发现添加这一行可以使错误消失: build.xml -> fx:deploy ->

<fx:runtime strip-native-commands="false">
    <fx:add-modules value="java.base"/>
    <fx:module-path value="${java.home}/jmods"/>
    <fx:module-path value="${basedir}/modules"/>
</fx:runtime>