如何将.jar文件添加到本机包?

时间:2013-08-14 19:59:10

标签: java ant javafx-2

您好我正在javafx 2.2中创建一个应用程序,在编译本机包(EXE)时我可以看到在运行时我想念一个我需要的库。

MyApp的\运行时\ JRE \ lib中\分机\把sunjce_provider.jar

我尝试在build.xml

中添加它
<fx:deploy width="${javafx.run.width}" height="${javafx.run.height}"
            nativebundles="exe"
           outdir="${basedir}/${dist.dir}" outfile="${application.title}">
    <fx:application name="${application.title}" mainClass="${javafx.main.class}"/>
    <fx:resources>

        ...

        <fx:fileset dir="${platform.home}/jre/lib/ext" includes="sunjce_provider.jar"
                type="data"/>

    </fx:resources>
    <fx:info title="${application.title}" vendor="${application.vendor}"/>
</fx:deploy>

但这只留在

MyApp的\应用\把sunjce_provider.jar

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:4)

包括应用程序库

本节介绍如何包含应用程序所依赖的标准jar。

JavaFX ant任务参考中的示例build.xml片段,关键行为<fx:fileset dir="dist" includes="lib/*.jar"/>

<!-- Expect definition of JavaFX ant tasks is already imported -->

<fx:jar destfile="dist/application.jar">
    <!-- Details about application -->
    <fx:application name="Sample JavaFX application"
            mainClass="test.MyApplication"/>

    <!-- Define what auxilary resources are needed -->
    <fx:resources>
        <fx:fileset dir="dist" includes="lib/*.jar"/>
    </fx:resources>

    <!-- What to include into result jar file?
         Everything in the build tree -->
    <fileset dir="build/classes"/>

    <!-- Customize jar manifest (optional) -->
    <manifest>
        <attribute name="Implementation-Vendor" value="Samples Team"/>
        <attribute name="Implementation-Version" value="1.0"/>
    </manifest>
</fx:jar>   

修改JRE组件

本节介绍如何自定义与应用程序捆绑在一起的Java运行时组件。

请参阅Java Deployment blog on including the sun jce provider in native packaging(有问题的提醒:sunjce_provider.jar in jre for standalone javafx application)。

相关部分(从博客条目中复制和粘贴)是:

如果您使用打包工具生成可安装程序包,则可能需要在将应用程序映像打包到安装程序之前对其进行调整。为什么?例如,您可能想要对应用程序进行签名,因此它似乎对操作系统不可信(例如,为了取悦Mac OS X Gatekeeper)。

默认情况下,自包含应用程序不包含Java Runtime的完整副本。我们只包含一组强制性组件。采用这种方法的部分原因是我们希望减小封装尺寸。但是,在某些情况下,您的应用程序可能依赖于这些可选组件,在这种情况下,您需要一种方法将它们添加到私有运行时。例如,如果缺少jre / lib / ext / sunjce_provider.jar,则https连接将不起作用。

目前,这可以通过提供在填充应用程序映像后执行的自定义配置脚本来实现。与上面带有图标的示例一样,您需要启用详细输出以查找脚本文件的名称,然后将其放到打包工具将找到它的位置。请注意,脚本语言也是特定于平台的。目前我们只在Windows上支持Mac / Linux和Windows脚本的shell。

您如何找到应用程序图像的位置?目前,自定义脚本在存储配置文件的目录中运行,但可以使用相对平台特定路径访问应用程序映像。您可以从详细输出或通过将环境变量JAVAFX_ANT_DEBUG设置为true来获取此路径,以保留中间构建工件。

以下是示例脚本(由John Petersen提供),您可以使用它将jre / lib / ext / sunjce_provider.jar添加到Windows平台上的MyApp应用程序包中。脚本使用Javascript,但您也可以使用VBScript for Windows脚本。

<?xml version="1.0" ?>  
<package>  
   <job id="postImage">  
    <script language="JScript">  
     <![CDATA[  
        var oFSO = new ActiveXObject("Scripting.FileSystemObject");  
        var oFolder = oFSO.getFolder(".");  
        var from = oFolder.path + "\\MyApp\\app\\sunjce_provider.jar";  
        var to = oFolder.path + "\\MyApp\\runtime\\jre\\lib\\ext";  
        if (!oFSO.FolderExists(to)) {  
          oFSO.CreateFolder(to);  
        }  
        to += "\\";  
        oFSO.CopyFile(from, to);  
     ]]>  
    </script>  
   </job>  
</package>