嗨,我正在javafx 2.2中创建一个应用程序,在编译本机捆绑包(EXE)时,我可以看到在运行时中我错过了我需要的库。
MyApp\runtime\jre\lib\ext\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\app\sunjce_provider.jar
有办法做到这一点吗?
包括应用程序库
本节展示了如何包含应用程序所依赖的标准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部署博客,了解如何将sun-jce提供程序包含在本机打包中(有问题:针对独立javafx应用程序的jre中的sunjce_provider.jar)。
相关部分(从博客条目复制粘贴)为:
如果您正在使用打包工具来生成可安装的包,那么在将应用程序映像打包到安装程序中之前,可能需要对其进行调整。为什么?例如,您可能想对应用程序进行签名,这样操作系统就不会认为它不受信任(例如,为了取悦Mac OS X Gatekeeper)。
此外,默认情况下,自包含的应用程序不包含Java Runtime的完整副本。我们只包括一组强制性组件。之所以采取这种方法,部分原因是我们希望缩小包装尺寸。但是,在某些情况下,应用程序可能依赖于这些可选组件,在这种情况下,您需要一种方法将它们添加到专用运行时。例如,如果缺少jre/lib/ext/sunjce_provider.jar,https连接将不起作用。
目前,这可以通过提供在填充应用程序映像后执行的自定义配置脚本来实现。与上面的图标示例一样,您需要启用详细输出来查找脚本文件的名称,然后将其放到打包工具可以找到的位置。请注意,脚本语言也是特定于平台的。目前,我们只支持适用于Mac/Linux和Windows Script的shell。
您如何找到应用程序映像的位置?目前,自定义脚本在存储配置文件的目录中运行,但可以使用相对的平台特定路径访问应用程序映像。您可以从详细输出派生此路径,也可以通过将环境变量JAVAFX_ANT_DEBUG设置为true来保留中间构建工件。
以下是示例脚本(由John Petersen提供),您可以使用它将jre/lib/ext/sunjce_provider.jar添加到Windows平台上MyApp的应用程序包中。使用Javascript编写脚本,但也可以使用VBScript编写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>