【问题标题】:Ant-task don't work with java 9蚂蚁任务不适用于 java 9
【发布时间】:2018-04-04 07:47:26
【问题描述】:

我希望你能帮助我。

我用 ant 构建工具制作了一个包,java 8 工作正常,但 java 9 我有一个例外。 我不明白为什么,请帮助我

对于安装程序,我使用 Inno Setup 5。 我的 IDE 是 Eclipse Oxygen.1a Release (4.7.1a)。

例外

    Buildfile: D:\Workspace BuildTest\HT .-. OE7 v2\build\build.xml
setup-staging-area:
   [delete] Deleting directory D:\Workspace BuildTest\HT .-. OE7 v2\build\externalLibs
   [delete] Deleting directory D:\Workspace BuildTest\HT .-. OE7 v2\build\externalFiles
   [delete] Deleting directory D:\Workspace BuildTest\HT .-. OE7 v2\build\project
   [delete] Deleting directory D:\Workspace BuildTest\HT .-. OE7 v2\build\projectRefs
    [mkdir] Created dir: D:\Workspace BuildTest\HT .-. OE7 v2\build\externalLibs
    [mkdir] Created dir: D:\Workspace BuildTest\HT .-. OE7 v2\build\externalFiles
    [mkdir] Created dir: D:\Workspace BuildTest\HT .-. OE7 v2\build\project
    [mkdir] Created dir: D:\Workspace BuildTest\HT .-. OE7 v2\build\projectRefs
     [copy] Copying 42 files to D:\Workspace BuildTest\HT .-. OE7 v2\build\project
do-compile:
   [delete] Deleting directory D:\Workspace BuildTest\HT .-. OE7 v2\build\build
    [mkdir] Created dir: D:\Workspace BuildTest\HT .-. OE7 v2\build\build\src
    [mkdir] Created dir: D:\Workspace BuildTest\HT .-. OE7 v2\build\build\libs
    [mkdir] Created dir: D:\Workspace BuildTest\HT .-. OE7 v2\build\build\classes
  [copydir] DEPRECATED - The copydir task is deprecated.  Use copy instead.
  [copydir] Copying 1 file to D:\Workspace BuildTest\HT .-. OE7 v2\build\externalFiles
  [copydir] DEPRECATED - The copydir task is deprecated.  Use copy instead.
  [copydir] Copying 6 files to D:\Workspace BuildTest\HT .-. OE7 v2\build\build\libs
     [copy] Copying 42 files to D:\Workspace BuildTest\HT .-. OE7 v2\build\build\src
     [copy] Copying 22 files to D:\Workspace BuildTest\HT .-. OE7 v2\build\build\classes
     [copy] Copied 14 empty directories to 3 empty directories under    D:\Workspace BuildTest\HT .-. OE7 v2\build\build\classes
    init-fx-tasks:
    do-deploy:
    [copy] Copying 1 file to D:\Workspace BuildTest\HT .-. OE7 v2\build\dist
    [mkdir] Created dir: D:\Workspace BuildTest\HT .-. OE7 v2\build\build \classes\META-INF
    "Adding modules: [java.rmi, java.sql, javafx.web, jdk.charsets, java.logging, java.xml.crypto, java.xml, jdk.xml.dom, jdk.jfr, java.datatransfer, jdk.packager.services, jdk.httpserver, javafx.base, jdk.net, java.desktop, java.naming, javafx.controls, java.prefs, java.security.sasl, jdk.naming.rmi, jdk.zipfs, java.base, jdk.crypto.ec, jdk.management.agent, java.management, java.sql.rowset, javafx.swing, jdk.jsobject, jdk.sctp, java.smartcardio, jdk.unsupported, jdk.jdwp.agent, jdk.scripting.nashorn, java.instrument,  java.security.jgss, jdk.management, java.compiler, javafx.graphics,  jdk.security.auth, java.scripting, javafx.fxml, jdk.dynalink, javafx.media,  jdk.accessibility, java.management.rmi, jdk.naming.dns, jdk.security.jgss,  jdk.localedata] to runtime image."
    [fx:deploy] java.io.IOException: Exec failed with code 2 command [[C:\Program  Files (x86)\Inno Setup 5\iscc.exe, /oD:\Workspace BuildTest\HT .-. OE7  v2\build\deploy, C:\Users\DH\AppData\Local\Temp\fxbundler15157392799151375137 \images\win-exe.image\OE 7.iss] in C:\Users\DH\AppData\Local \Temp\fxbundler15157392799151375137\images\win-exe.image
    [fx:deploy]     at jdk.packager/com.oracle.tools.packager.IOUtils.exec(IOUtils.java:169)
    [fx:deploy]     at jdk.packager/com.oracle.tools.packager.IOUtils.exec(IOUtils.java:142)
    [fx:deploy]     at jdk.packager/com.oracle.tools.packager.IOUtils.exec(IOUtils.java:136)
    [fx:deploy]     at jdk.packager/com.oracle.tools.packager.windows.WinExeBundler.buildEXE(WinExeBundler.java:703)
    [fx:deploy]     at jdk.packager/com.oracle.tools.packager.windows.WinExeBundler.bundle(WinExeBundler.java:372)
    [fx:deploy]     at jdk.packager/com.oracle.tools.packager.windows.WinExeBundler.execute(WinExeBundler.java:174)
    [fx:deploy]     at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateNativeBundles(PackagerLib.java:371)
    [fx:deploy]     at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateDeploymentPackages(PackagerLib.java:348)
    [fx:deploy]     at com.sun.javafx.tools.ant.DeployFXTask.execute(DeployFXTask.java:310)
    [fx:deploy]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293)
    [fx:deploy]     at jdk.internal.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    [fx:deploy]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [fx:deploy]     at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    [fx:deploy]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    [fx:deploy]     at org.apache.tools.ant.Task.perform(Task.java:348)
    [fx:deploy]     at org.apache.tools.ant.Target.execute(Target.java:435)
    [fx:deploy]     at org.apache.tools.ant.Target.performTasks(Target.java:456)
    [fx:deploy]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405)
    [fx:deploy]     at org.apache.tools.ant.Project.executeTarget(Project.java:1376)
    [fx:deploy]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    [fx:deploy]     at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:36)
    [fx:deploy]     at  org.apache.tools.ant.Project.executeTargets(Project.java:1260)
    [fx:deploy]     at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:460)
    [fx:deploy]     at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntR unner.java:142)

    BUILD FAILED
    D:\Workspace BuildTest\HT .-. OE7 v2\build\build.xml:191: Error: Bundler  "EXE Installer" (exe) failed to produce a bundle.

    Total time: 8 seconds

这是什么?我仍然想发布 build.xml,但我收到了这个错误 “看起来你的帖子主要是代码,请添加更多细节。”

【问题讨论】:

  • 您尝试从控制台手动执行该构建命令。据我所知,您有一些不应该出现的空格,并且可能在某些参数周围缺少引号。
  • 您好,谢谢您的回答,我曾尝试从控制台手动执行该构建命令,但我有同样的例外。
  • 没错。因此,首先将其修复为从命令行工作。
  • 好的,但我不知道还能尝试什么,我已经很久没有使用 ant 了
  • 对不起,我不认识“蚂蚁”。我只是告诉你,你的 inno 编译器行不正确。

标签: java eclipse javafx ant inno-setup


【解决方案1】:

我发现了错误。

Ant 创建了一个临时文件夹,其中复制了包的数据,现在它很疯狂。

我使用 Java 8 运行脚本,创建了文件“OE 7.iss”。

C:\Users\DH\AppData\Local\Temp\fxbundler15157392799151375137 \images\win-exe.image\OE 7.iss

我用 Java 9 运行脚本,创建了文件“OE7.iss”,他 去掉程序名中的空格,找不到文件

C:\Users\DH\AppData\Local\Temp\fxbundler15157392799151375137 \images\win-exe.image\OE7.iss

我只是更改了java版本,没有别的。

我能够修复此错误,我将程序名称更改为“OE7”,但现在我又遇到了新错误

现在创建的包(使用 Java 9)没有“OE7.iss(Inno Setup)”和外部库,当我使用 java 8 编译它时,它工作正常

我的 build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="Build" default="do-deploy" basedir="."  xmlns:fx="javafx:com.sun.javafx.tools.ant">

<property name="project.Folder" value="Build"/>
<property name="publisher" value="Indivikar AG"/>
<property name="native.Bundles" value="exe"/>
<property name="title" value="OE7"/>
<property name="version" value="1.0.0"/>
<property name="main.Class" value="application.StageStartOE7"/>
<!-- <property name="Java.Version" value="jdk1.8.0_151"/> -->
<property name="Java.Version" value="jdk-9.0.4"/>


<property name="project.Path" value="D:\Workspace BuildTest\OE7"/>      
<property name="lib.Path" value="${project.Path}\lib"/> 

<target name="init-fx-tasks">
    <path id="fxant">
        <filelist>
            <file name="C:\Program Files\Java\${Java.Version}\lib\ant-javafx.jar"/>
            <file name="C:\Program Files\Java\${Java.Version}\jre\lib\ext\jfxrt.jar"/>
            <file name="${basedir}"/>
        </filelist>
    </path>

    <taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
        uri="javafx:com.sun.javafx.tools.ant"
        classpathref="fxant"/>      
</target>

<target name="setup-staging-area">
    <delete dir="externalLibs" />
    <delete dir="externalFiles" />
    <delete dir="project" />
    <delete dir="projectRefs" />

    <mkdir dir="externalLibs" />    
    <mkdir dir="externalFiles" />
    <mkdir dir="project" />
    <mkdir dir="projectRefs" />

    <copy todir="project">
        <fileset dir="${project.Path}">
            <include name="src/**" />
        </fileset>
    </copy>
</target>

<target name='do-compile'>
    <delete dir="build" />
    <mkdir dir="build/src" />
    <mkdir dir="build/libs" />
    <mkdir dir="build/classes" />


    <!-- Copy project-libs references -->   
     <copydir src="${lib.Path}"
               dest="${basedir}\build\libs"
               includes="**/*.jar"
               excludes="**/Test.java"
     />

    <copy todir="build/libs">
        <fileset dir="externalLibs">
            <include name="**/*.jar" />
        </fileset>
    </copy>

    <!-- Copy project sources itself -->
    <copy todir="build/src">
        <fileset dir="project/src">
            <include name="**/*"/>
        </fileset>
    </copy>

    <javac includeantruntime="false" source="9" target="9" srcdir="build/src" destdir="build/classes" encoding="Cp1252">
        <classpath>
            <fileset dir="build/libs">
                <include name="*"/>
            </fileset>
        </classpath>
    </javac>

    <!-- Copy over none Java-Files -->
    <copy todir="build/classes">
    <fileset dir="project/src">
        <exclude name="**/*.java"/>
    </fileset>
    </copy>

</target>
<target name="do-deploy" depends="setup-staging-area, do-compile, init-fx-tasks">
    <delete file="dist"/>       
    <delete file="deploy" />

    <mkdir dir="dist" />
    <mkdir dir="dist/libs" />

    <copy todir="dist/libs">
        <fileset dir="externalLibs">
            <include name="*" />
        </fileset>
    </copy>

    <fx:resources id="appRes">
        <fx:fileset dir="dist" includes="${project.Folder}.jar"/>           
        <fx:fileset dir="dist" includes="libs/*"/>
        <fx:fileset dir="dist" includes="resources/**"/>
    </fx:resources>

    <fx:application id="fxApplication"
        name="${title}"
        mainClass="${main.Class}"
        version="${version}"
    />

    <mkdir dir="build/classes/META-INF" />

    <fx:jar destfile="dist/Build.jar">
        <fx:application refid="fxApplication"/>
        <fileset dir="build/classes">
        </fileset>
        <fx:resources refid="appRes"/>

        <manifest>
            <attribute name="Implementation-Vendor" value="${publisher}"/>
            <attribute name="Implementation-Title" value="${title}"/>
            <attribute name="Implementation-Version" value="${version}"/>
            <attribute name="JavaFX-Feature-Proxy" value="None"/>
        </manifest>
    </fx:jar>

    <mkdir dir="deploy" />

    <fx:deploy
        embedJNLP="false"
        extension="false"
        includeDT="false"
        offlineAllowed="true"
        outdir="${basedir}/deploy"          
        outfile="Build" nativeBundles="${native.Bundles}"
        updatemode="background" 
        verbose="true" >


        <fx:info title="Build" vendor="${publisher}"/>

        <fx:application refId="fxApplication"/>
        <fx:resources refid="appRes"/>
    </fx:deploy>
</target>

</project>

如果我知道更多,我会再次与您联系

【讨论】:

  • 我使用 Java 10.0.1 进行了测试,并且 Ant 构建“fx:deploy”任务也失败了。在 Java 8 中,构建运行良好。在 Java 9 和 10.0.1 中它失败了。按照您的建议,从应用程序标题中删除空格后,构建在 Java 10.0.1 中成功。我还必须更改图标和设置图标的文件名,以反映应用程序标题的更改而没有空格。安装程序图标本身仍设置回默认 Java 图标。我希望会有一个修复或至少一个更好的解决方法来保持应用程序名称中的空格,因为它在 Java 8 中工作。
【解决方案2】:

这是一个已知的错误。在 Java 8 之后,javafxpackager ant-task 不再接受 [space] 字符。 Oracle 网站上有一个错误报告:

https://bugs.openjdk.java.net/browse/JDK-8202960

但它被关闭为“不会修复”。至于他们为什么不解决这个问题的解释,我发现了一位 Oracle 工程师的评论:

我们正在寻找机会提出一些新工具来解决这个问题 功能,但现在分享细节还为时过早,因为这是在 讨论。

因此看来,Oracle 将很快淘汰 Javafx ant-task 以支持其他东西。但我不知道什么或什么时候:(

更新 1:

在 Java 11 中,Oracle 将淘汰 JavaPackager,但将引入一个名为 JPackager 的新打包程序。它将不再包括对 ant 脚本的支持;只有命令行。详细信息可以在这里找到:

https://bugs.openjdk.java.net/browse/JDK-8200758

更新 2: 正如@mipa 在 cmets 中指出的那样,JavaPackager 将从 Java 11 中删除,但在 Java 12 之前不会有替代品:(

更新 3: Java 15+ 现在有 jpackage,它比旧的 JavaPackager 好得多。它不需要ant任务,非常容易通过命令行使用。

【讨论】:

【解决方案3】:

您的日志中有这一行:

[fx:deploy] java.io.IOException: Exec failed with code 2 command [[C:\Program Files (x86)\Inno Setup 5\iscc.exe, /oD:\Workspace BuildTest\HT .-. OE7 v2\build\deploy, C:\Users\DH\AppData\Local\Temp\fxbundler15157392799151375137 \images\win-exe.image\OE 7.iss]

现在,我会说你对那行代码有一些问题。

  • C:\Program Files (x86)

路径真的有两个空格吗?不应该是:

C:\Program Files (x86)


  • Inno Setup 5\iscc.exe,

最后的逗号是什么?不应该是:

Inno Setup 5\iscc.exe


  • /oD:\Workspace BuildTest\HT .-. OE7 v2\build\deploy

您的路径中有空格。这是一条非常奇怪的道路,我什至可能是错的。只有你可以确认。但是你需要引号。比如:

/o"D:\Workspace BuildTest\HT .-. OE7 v2\build\deploy"


  • , C:\Users\DH\AppData\Local\Temp\fxbundler15157392799151375137 \images\win-exe.image\OE 7.iss

同样,您在开头有一个 逗号,并且您没有将脚本文件的路径包含在 引号 中。比如:

"C:\Users\DH\AppData\Local\Temp\fxbundler15157392799151375137 \images\win-exe.image\OE 7.iss"


所以,把它们放在一起:

C:\Program Files (x86)\Inno Setup 5\iscc.exe /o"D:\Workspace BuildTest\HT .-. OE7  v2\build\deploy" "C:\Users\DH\AppData\Local\Temp\fxbundler15157392799151375137 \images\win-exe.image\OE 7.iss"

所以:

  1. 验证您的所有路径以确保它们正确
  2. 在路径周围加上" ... ",因为它们有空格。

ISCC 的帮助提供了更多详细信息。

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 2015-05-30
    • 2012-10-09
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2013-12-04
    • 2016-01-18
    相关资源
    最近更新 更多