在你开始前
关于本教程
当我开始构建应用程序时,我选择了Java编程语言作为实现语言。 我想编写一个可以在Microsoft®Windows®,Linux®或Mac OS X上运行的应用程序。该应用程序必须使用本地资源,因此将其构建为独立的应用程序比在Web上尝试更有意义。应用。 但是,我在部署上陷入了困境。 我希望能够轻松地为初始安装部署应用程序,并且希望能够轻松地推送更新而不必在我的应用程序中构建更新框架。 输入JWS,这项技术可让您单击一下即可通过Internet部署应用程序。
如果您将JWS与在Eclipse平台上构建应用程序的能力结合在一起,那么您将拥有一个非常强大的组合,该组合使您能够以比构建和推出安装程序容易得多的方式部署一些重要的企业级工具。
本教程显示了如何基于Eclipse平台构建应用程序以及如何使用JWS部署该应用程序。 这不是与建设使用标准部件工具包(SWT)在Eclipse富客户端平台(RCP)应用,并使用JWS分发(见混淆相关信息 ,了解如何做到这一点的教程)。
目标
阅读完本教程之后,您应该能够开发一个扩展Eclipse平台的产品,并使用JWS部署基于Eclipse的应用程序。
先决条件
您应该熟悉Eclipse和Java编程语言。 阅读XML示例时,对XML的了解会有所帮助。
系统要求
要运行样本,您必须安装并运行Eclipse V3.3或更高版本。 您还需要安装Java V1.5或更高版本。 要运行JWS示例,您需要访问运行中的Web服务器,并具有将MIME类型关联添加到Web服务器(如果尚未正确配置)的能力。 理想情况下,您应该具有可用于测试的本地开发Web服务器。
Eclipse框架概述
Eclipse Java集成开发环境(IDE)构建在Eclipse平台上。 大多数人习惯使用的默认Java IDE是带有一组基本插件的标准Eclipse平台,这些插件随可下载的Eclipse发行版一起自动安装。 这些插件构成了用户作为IDE的体验。
从Eclipse站点,您可以仅下载Eclipse Platform软件开发工具包(SDK)。 仅使用Eclipse Platform SDK,如果不安装其他插件就无法进行Java开发。 如果尝试使用向导创建新项目,则会看到没有任何常用的向导(例如Java Project)可用。 由于行为有限,Eclipse Platform SDK本身并不是特别有用。 但是,由于Eclipse Platform SDK提供了用于构建应用程序的框架,因此作为构建更强大工具的起点非常有用。
当您在Eclipse平台上构建功能并拥有自己的应用程序时,下一步就是将其部署到用户。 JWS是可用于部署Java应用程序的机制。 用Java语言编写的Eclipse也不例外。 当用户单击链接时,JWS使您能够相对容易地通过Internet部署应用程序。
RCP应用
Eclipse还使您能够使用SWT构建RCP应用程序。 此过程不同于构建成为基于Eclipse平台的应用程序的产品。 使用SWT构建的应用程序可以较小,并且不需要扩展Eclipse平台。 如果您要构建的应用程序不扩展Eclipse平台,请考虑使用SWT。 您仍然可以使用JWS分发SWT应用程序。
Java Web Start概述
通过JWS,您只需单击一下即可在Internet上部署独立的Java应用程序。 您的用户单击指向带有Java网络启动协议(.jnlp)扩展名的XML文件的链接,其余的工作由JWS完成。 JWS使用JNLP下载所需的文件,将其缓存并启动应用程序。
作为开发人员,您将必要的文件(例如Java存档(JAR))放在可以从Web服务器访问的位置。 JNLP文件包含的信息告诉用户计算机上的JWS客户端从何处获取JAR。 因此,您不必将独立的Java应用程序部署到所有用户的计算机上,而只需将应用程序部署到Web服务器上。 您的用户从那里获取它。
除了部署之外,JWS还大大简化了更新。 每当启动JWS应用程序时,用户计算机上的JWS客户端都会尝试查找服务器,并确保客户端具有最新文件。 如果本地文件已过期,它将自动将更新的文件下载到客户端。 更新对用户几乎是透明的,这提供了理想的环境,通过该环境可以基于Eclipse平台部署应用程序。
安全
应用程序通常要求用户具有提升的权限才能安装它们。 用户拥有比通常更高级别的权限的需求通常成为提供用户在其计算机上安装应用程序能力的障碍,尤其是在大型公司中。 由于JWS将JAR缓存在非系统目录中并具有其他安全权限,因此用户无需具有提升的权限就可以在本地安装和运行JWS应用程序。 相对受限的用户能够利用JWS的能力是考虑将其部署在大型组织中的另一个令人信服的理由。
JWS以类似于Java小程序的“沙盒”执行方式运行应用程序。 JNLP文件中的条目(稍后将详细介绍)提供了请求访问文件系统和网络权限的能力。 要请求所有权限,必须签署JAR。 如果您有一个密钥库,Eclipse会为您解决这一问题。 (“打包应用程序”部分提供了有关配置Eclipse以使用您的密钥库的更多信息。)
离线运行
当用户下载了该应用程序并运行了一次之后,并且JWS在其本地缓存中拥有了所需的资源时,您的用户可以自由使用该应用程序而无需连接到Internet(只要您的应用程序不需要Internet)连接性)。 JWS仅使用本地缓存的资源来运行应用程序。
配置
安装JWS
如果您具有Java平台标准版(Java SE)V5或更高版本,则您已经安装了JWS。 如果您使用Windows,则会在Java主目录中安装JWS(例如,C:\ Program Files \ Java \ jre \ bin)。 在Mac OS X上,JWS驻留在Applications / Utilities / Java中。 您可以在不实际安装或运行JWS应用程序的情况下启动JWS控制台。
通过启动JWS控制台,您可以查看JWS缓存中的应用程序。 在控制台中,您可以启动已安装的任何JWS应用程序,将它们从缓存中删除,或安装应用程序的快捷方式。 要启动控制台,请输入以下命令,确保路径中包含Java
:
javaws -viewer
启动后,查看器将如图1所示。如果您以前从未使用过JWS,则可能没有安装任何应用程序。
图1. Java Web Start查看器
如果没有安装Java Runtime Environment(JRE),请下载并安装最新版本。 只要是Java SE V5或更高版本,它将包含JWS。
配置您的Web服务器
在大多数情况下,如果打开JNLP文件,JWS应该自动启动。 如果JNLP文件位于未正确关联JNLP文件的Web服务器上,则可以下载该文件并在本地打开它。 实际上,我之前已经通过电子邮件发送了JNLP文件-仍然具有位于文件URL中的资源-收件人能够使用JWS成功运行该应用程序。
如果要设置Web服务器来提供JNLP文件(这是最简单的分发方法),则需要添加以下文件关联:
application/x-java-jnlp-file JNLP
请遵循Web服务器的文档以正确设置MIME关联。 如果使用的是ISP,请查阅ISP的文档以了解如何添加JNLP MIME类型。
JNLP文件结构
JNLP文件是一个XML文件,其中包含有关JWS如何下载和使用您的应用程序的说明。 它有助于理解JNLP文件的不同部分,因此您可以放心地对其进行修改。
清单1显示了一个基本的JNLP文件。 它仅具有通过JWS分发独立应用程序绝对必需的那些元素。
清单1.一个基本的JNLP文件
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://www.example.com/applications/" href="app.jnlp">
<information>
<title>Application Title</title>
<vendor>Application Vendor</vendor>
<homepage href="http://www.example.com" />
<description>This is an application.</description>
</information>
<security>
<all-permissions />
</security>
<!-- The name of the main class to execute. -->
<application-desc main-class="com.example.MyMainClass">
</application-desc>
<resources>
<jar href="exampleApp.jar" />
</resources>
</jnlp>
清单1中的示例将告诉JWS从URL下载exampleApp.jar文件。 完整的URL为http://www.example.com/applications/exampleApp.jar。 下载JAR时,JWS将执行com.example.MyMainClass
类。 假设该类需要运行的所有内容都包含在exampleApp.jar中,则它将在用户自己初始化它时运行。 该文件等同于运行命令:
java -cp exampleApp.jar com.example.MyMainClass
在此示例中,由于存在<all-permissions>
元素,因此必须对exampleApp.jar进行签名。
<jnlp>
元素是文件的根元素,具有表1中的属性。
表1. <jnlp>
元素属性
属性 | 描述 |
---|---|
spec | 此文件将使用的JNLP规范的最低版本 |
codebase | 应用程序的基本URL(文件中的其他URL将相对于该基本URL) |
href | JNLP文件本身的URL(JNLP文件可以脱机使用,并且此URL告诉JWS从何处获取在线版本) |
version | 应用程序的版本和JNLP文件(在构建JWS应用程序时,将它们视为同一件事) |
<information>
元素具有表2中所示的属性。
表2. <information>
元素的属性
属性 | 描述 |
---|---|
os | JWS应用程序支持的操作系统 |
arch | 支持的架构(处理器) |
platform | 支持平台 |
locale | 支持的语言环境 |
其他必需元素:
-
<title>
元素包含应用程序的标题。 这显示在JWS控制面板中。 当用户使用JWS启动应用程序时,也会显示它。 -
<vendor>
元素包含应用程序的软件供应商的名称。 -
<resources>
元素包含有关应用程序所需资源的信息。 这里的资源包括JAR,这些JAR包含应用程序使用的类或应用程序可以设置和使用的属性。 典型的资源可以在表3中示出的元件中的任一个中列出(参见相关信息为一个完整的列表)。
表3.典型的<resource>
元素
元件 | 描述 |
---|---|
<jar> | 包含JAR的href 的href 属性 |
<nativelib> | 包含对本机库JAR的href 的href 属性 |
<j2se> | 赋予虚拟机(VM)的版本和参数 |
<property> | 指定System.getProperty 可以找到的属性 |
有关JNLP文件的完整语法,请参见参考资料中的指向Sun Microsystems文档的链接 。
构建一个基于Eclipse的基本应用程序
此时,您应该了解JNLP文件的功能以及它包含的内容,以便使用JWS部署应用程序。 您应该具有一个Web服务器,可以从该服务器启动具有正确关联的JNLP文件。 基本了解JWS和JNLP文件之后,您就可以开始基于Eclipse构建应用程序了。
安装Eclipse
首先,您需要下载Eclipse Platform SDK(如果尚未安装Eclipse)。 如果您已经具有Eclipse,则可以使用已安装的版本。 使用Platform SDK时,需要安装Eclipse Plug-in Development Environment功能(有关在安装程序中选择的功能的示例,请参见图2)。 要了解有关在Eclipse中安装插件的更多信息,请参阅参考资料 。
图2.选择Eclipse插件开发环境
创建一个新产品
要了解实际使用的JWS部署,请创建一个新产品。 您的产品将包含一个将在Eclipse启动器启动Eclipse平台时自动加载的应用程序。
该应用程序有一个简单的视图,向您显示已正确加载,类似于典型的Hello World应用程序。 该视图在工作台中以新的视角打开。 这些类的统一建模语言(UML)图如图3所示。
图3.产品基本类的UML
![产品基本类的UML](https://i-blog.csdnimg.cn/blog_migrate/c2d3d91be08a88e40ea23746a5fb5fa2.png)
为简洁起见,我使类尽可能简单。 它们足以表明正在使用其自己的自定义视图加载新的自定义产品。 如果您构建自己的产品,则可以添加菜单栏,其他视图,帮助屏幕等。 要添加这些定制功能,请查看“ 相关主题”部分,以找到更多有关扩展Eclipse的地方。
要构建一个简单的产品示例,请首先构建一个新的插件项目。 选择“ 文件”>“新建”>“项目” 。 在Select a wizard窗口中,展开Plug-in Development ,然后选择Plug-in Project ,如图4所示。单击Next继续。
图4.选择插件项目
对于项目名称 ,输入适合您的项目的名称。 我喜欢将插件的基本软件包名称用作项目,例如com.nathanagood.examples.rcp.simpleApp。 Eclipse的插件项目似乎以相同的方式命名,因此我遵循该约定。 输入项目名称后,将其他值保留为默认值。
图5.输入项目信息
在Plug-in Content窗口(参见图6)中,您可以调整插件的名称,提供程序的名称和版本。 我将.plugin添加到插件ID的默认值的末尾,但只是作为首选项。 无需更改。 如果要更改Activator
类的名称或类的包,请在此窗口中进行更改。 完成更改后,点击下一步 。
图6.输入插件内容
“ 模板”页面(请参见图7)包含一个模板列表,可以帮助您开始使用插件。 因为我想创建一个示例视图,然后向其添加产品和应用程序扩展,所以我选择了带有视图的插件以开始使用。 选择您要使用的模板,然后单击完成以构建您的项目。
图7.选择一个模板
完成样例项目
此时,您将拥有一个带有视图的新插件项目。 要完成示例项目的构建:
- 扩展
WorkbenchAdvisor
类(在本示例中为SimpleApplicationAdvisor
)。此类具有一个返回透视图ID的方法,以在应用程序的初始化中加载透视图的ID,因此您可以立即看到带有自定义视图的自定义透视图,而无需看到Welcome工作台。
- 创建的实现
IPerspectiveFactory
(即SimpleAppPerspectiveFactory
)。工厂通过修改传递给其
createInitialLayout()
方法的IPageLayout
来创建您的初始透视图。 - 扩展
WorkbenchWindowAdvisor
(即SimpleWindowAdvisor
)。通过覆盖
preWindowOpen()
,可以设置工作台的初始大小和其他属性。 - 创建的实现
IApplication
(即SimpleApplication
)。实现类创建并运行您的自定义工作台配置,并在启动时加载您的透视图和视图。
这些类的示例在本教程随附的代码下载中提供。
修改plugin.xml文件
构建完类之后,修改plugin.xml文件以包括扩展点,这些扩展点具有对刚创建的所有类的引用。 像本教程一样,首先编写所有类的优点是,可以使用plugin.xml文件的图形编辑器来选择扩展点和类。 尽管您也可以轻松地手动编辑源XML,但是使用GUI添加扩展点可以减少类名或扩展点输入错误的可能性。 我的大部分疑难解答都导致了复制和粘贴错误,其中我错误输入了ID或类名。
图8在图形化的插件清单编辑器的Extensions选项卡上显示了扩展点。
图8.扩展点
清单2显示了plugin.xml文件的示例。
清单2.示例plugin.xml文件
<?xml version="1.0" encoding="utf-8"?>
<?eclipse version="3.2"?>
<plugin>
<extension point="org.eclipse.ui.views">
<category name="Sample Category"
id="com.nathanagood.examples.rcp.simpleApp.plugin"></category>
<view name="Sample View" icon="icons/sample.gif"
category="com.nathanagood.examples.rcp.simpleApp.plugin"
class="com.nathanagood.examples.rcp.simpleapp.plugin.views.SampleView"
id="com.nathanagood.examples.rcp.simpleapp.plugin.views.SampleView">
</view>
</extension>
<extension point="org.eclipse.ui.perspectives">
<perspective id="com.nathanagood.examples.rcp.simpleApp.plugin.perspective"
name="Simple App Perspective"
class="com.nathanagood.examples.rcp.simpleapp.SimpleAppPerspectiveFactory"
fixed="false" />
</extension>
<extension point="org.eclipse.ui.perspectiveExtensions">
<perspectiveExtension targetID="org.eclipse.jdt.ui.JavaPerspective">
<view ratio="0.5" relative="org.eclipse.ui.views.TaskList"
relationship="right"
id="com.nathanagood.examples.rcp.simpleapp.plugin.views.SampleView">
</view>
</perspectiveExtension>
</extension>
<extension point="org.eclipse.help.contexts">
<contexts file="contexts.xml"></contexts>
</extension>
<extension point="org.eclipse.core.runtime.products"
id="product">
<product name="Simple App"
application="com.nathanagood.examples.rcp.simpleApp.plugin.app">
<property name="appName" value="Simple App" />
</product>
</extension>
<extension id="app"
point="org.eclipse.core.runtime.applications">
<application>
<run class="com.nathanagood.examples.rcp.simpleapp.SimpleApplication">
</run>
</application>
</extension>
</plugin>
添加配置文件
在完全修改并保存了plugin.xml文件之后,是时候添加用于向Eclipse平台介绍您的产品的产品配置文件了:
- 选择“ 文件”>“新建”>“产品配置” 。
出现“ 产品配置”窗口。
图9.产品配置
- 选择您的插件项目作为父文件夹。
- 添加文件名(例如
SimpleApplication.product
)。 - 选择使用现有产品 ,然后从列表中选择产品的ID。
产品的ID是您在
org.eclipse.core.runtime.products
扩展点下的plugin.xml文件中定义的。
添加产品配置文件后,可以使用图形产品配置编辑器来编辑有关产品的详细信息。 在概述选项卡上,单击同步以确保您的配置是最新的。 现在,您可以单击“ 启动Eclipse应用程序” (参见图10)以测试您的产品。 如果您需要对其进行调试,请单击“ 以调试模式启动Eclipse应用程序” 。
图10.启动Eclipse应用程序
运行您的产品
在继续之前,请确保您可以成功运行产品。 现在,确保它运行正常,可以消除沮丧和以后的故障排除。 启动后,代码下载如图11所示。
图11.简单的示例应用程序
打包应用程序
至此,您应该对JWS和JNLP文件结构有基本的了解。 您应该具有一个Web服务器,可以在其上发布产品的文件和JNLP文件,并且应该具有可以从Eclipse IDE启动的工作产品。 完成所有这些操作后,您就可以构建包装器功能了,该功能将用于发布产品。
创建包装器功能
包装功能只是一个功能项目,其中包含两个文件,每个文件都包含对产品插件以及运行产品插件所需的任何必要插件和功能的引用。 要添加新包装器功能项目,请选择“ 文件”>“新建”>“项目” 。 然后在Select a Wizard窗口中,展开Plug-in Development并选择Feature Project ,如图12所示。
图12.创建一个新的功能项目
在Feature Properties窗口中,输入项目的名称,功能ID,名称,版本和提供者信息,如图13所示,然后单击Next 。
图13.编辑特征属性
![编辑特征属性](https://i-blog.csdnimg.cn/blog_migrate/68a9cf934b12e1e4af0649078ac4bf1b.png)
在“ 参考的插件和片段”窗口中,如图14所示, 从启动配置中选择Initialize ,然后从列表中选择产品的配置文件的名称(例如SimpleApp.product )。 完成后 ,单击“ 完成” 。
图14.选择产品配置
新的功能项目将有两个文件:build.properties和feature.xml。 feature.xml文件具有图形编辑器,例如图形产品配置和插件编辑器。 打开feature.xml文件的图形编辑器。
在“ 插件”选项卡上,确保列出了您的产品插件。 另外,请验证是否列出了org.eclipse.equinox.launcher
插件。 在“ 功能”选项卡上,包括您的插件或功能所需的所有其他功能。 如果您急于使用JWS来查看您的产品,则可以选择所有这些产品。 除了应用程序的目录大小外,它不会造成任何伤害。 但是,对于实际产品,您应该跟踪依赖关系,以使下载大小尽可能地小巧。
导出包装器功能
选择了插件和功能部件后,可以将功能部件包装程序项目导出到目录中。 要导出项目,请选择“ 文件”>“导出” 。 在Select窗口中,展开Plug-in Development ,然后单击Deployable Features ,如图15所示。单击Next 。
图15.创建可部署的功能
现在:
- 在图16所示的Deployable features窗口中,选择您的功能。
图16.选择要部署的功能
- 在“ 目标”选项卡上,单击“ 目录” ,然后键入要将文件发布到的目录的名称。 该目录应位于Web文件夹下,以便可以使用Java Web Start选项卡上提供的URL对其进行访问。
- 在“ 选项”选项卡上,选择“ 打包为单个JAR存档” 。
- 在“ JAR签名”选项卡上,选择“使用密钥库 签名 JAR归档文件” 。 然后浏览到您的密钥库位置,然后输入别名和密码。
注:如果您没有密钥库,请参阅相关信息 ,了解如何创建一个链接。
- 在Java Web Start选项卡上,选择创建JAR归档文件的JNLP清单 。
- 将站点URL更新为JWS目录的基本URL。 从浏览器访问此URL应该访问您在“ 目标”选项卡上输入的目录。 有关示例,请参见图1。
图17.设置JWS属性
更新完有关功能部署的信息后,请单击“ 完成” 。 Eclipse将信息导出到提供的目录中。 根据所选的插件和功能的数量以及您的硬件资源,导出功能可能需要一些时间。 Eclipse完成后,您将在提供的目录中有两个新目录:功能和插件。 要素的JNLP文件将位于features目录中。 有关features目录内容的清单示例,请参见清单3。
清单3. features目录的内容
$ ls
com.nathanagood.examples.simpleApp.feature_1.0.0.jar
com.nathanagood.examples.simpleApp.feature_1.0.0.jnlp
org.eclipse.equinox.p2.user.ui.source_1.0.1.r34x_v20080721-7d-7OEMsLAz-vTBJ.jar
org.eclipse.equinox.p2.user.ui.source_1.0.1.r34x_v20080721-7d-7OEMsLAz-vTBJ.jnlp
org.eclipse.equinox.p2.user.ui_1.0.1.r34x_v20080721-7d-7OEMsLAz-vTBJ-ZHQaF155CE.jar
org.eclipse.equinox.p2.user.ui_1.0.1.r34x_v20080721-7d-7OEMsLAz-vTBJ-ZHQaF155CE.jnlp
org.eclipse.help.source_1.0.1.R34x_v20080827-7r7xEIxEI6Zu5nEqN7M3UBpglaat.jar
org.eclipse.help.source_1.0.1.R34x_v20080827-7r7xEIxEI6Zu5nEqN7M3UBpglaat.jnlp
org.eclipse.help_1.0.1.R34x_v20080827-7r7xEIxEI6Zu5nEqN7M3UBpglaat.jar
org.eclipse.help_1.0.1.R34x_v20080827-7r7xEIxEI6Zu5nEqN7M3UBpglaat.jnlp
org.eclipse.platform.source_3.4.1.r341_v20080731-9I96EiDElYevwz.jar
org.eclipse.platform.source_3.4.1.r341_v20080731-9I96EiDElYevwz.jnlp
org.eclipse.platform_3.4.1.r341_v20080731-9I96EiDElYevwz-p1bP5z-NlAaP7vtX6Utotqsu.jar
org.eclipse.platform_3.4.1.r341_v20080731-9I96EiDElYevwz-p1bP5z-NlAaP7vtX6Utotqsu.jnlp
org.eclipse.rcp.source_3.4.100.r341_v20080814-989JESIEdAciFYfkZZsBfSwQ2341.jar
org.eclipse.rcp.source_3.4.100.r341_v20080814-989JESIEdAciFYfkZZsBfSwQ2341.jnlp
org.eclipse.rcp_3.4.100.r341_v20080814-989JESIEdAciFYfkZZsBfSwQ2341.jar
org.eclipse.rcp_3.4.100.r341_v20080814-989JESIEdAciFYfkZZsBfSwQ2341.jnlp
通过将包装器功能成功导出到可从Web服务器访问的目录中,是时候构建应用程序的主JNLP文件了。
JNLP文件
在本部分中,您将构建并发布JNLP文件,然后测试部署并执行可能需要的任何故障排除。
生成JNLP文件
此时,您应该已经将功能部件成功导出到目录,并验证了功能部件和插件目录是否存在于可从Web服务器访问的位置。 现在是时候为您的应用程序编写JNLP文件了。 完整提供了一个示例JNLP文件。
清单4.简单应用程序的示例JNLP文件
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+"
codebase="http://localhost/~user/jws2" href="simpleapp.jnlp">
<information>
<title>SimpleApp Test</title>
<vendor>Nathan Good</vendor>
<homepage href="http://www.nathanagood.com" />
<description>This is my simple JWS Eclipse
application test.</description>
</information>
<!--request all permissions from the application. This does not change-->
<security>
<all-permissions />
</security>
<!-- The name of the main class to execute. This does not change-->
<application-desc main-class="org.eclipse.equinox.launcher.WebStartMain">
</application-desc>
<resources>
<jar href="plugins/org.eclipse.equinox.launcher_1.0.101.R34x_v20080819.jar"/>
<extension name="Simple App Feature"
href="features/com.nathanagood.examples.simpleApp.feature_1.0.0.jnlp" />
<property name="eclipse.product"
value="com.nathanagood.examples.rcp.simpleApp.plugin.product" />
</resources>
<resources os="Mac">
<j2se version="1.5+" java-vm-args="-XstartOnFirstThread" />
</resources>
<resources os="Windows">
<j2se version="1.4+" />
</resources>
<resources os="Linux">
<j2se version="1.4+" />
</resources>
</jnlp>
在此JNLP文件中, codebase
属性的值设置为将包装器功能发布到的位置的基本URL。 它应该与您在图17的Deployable features窗口中的Java Web Start选项卡上使用的URL匹配href
属性是JNLP文件的名称。
<information>
元素包括标题,描述以及有关正在分发的应用程序的其他信息。 <security>
和<application-desc>
元素需要如清单4所示。
修改<resources>
元素,以为<jar>
元素包括正确版本的Equinox启动器插件。 您可能必须在features目录中查找启动器的JAR的正确全名。 随着文件新版本的发布,清单4中的名称可能很快就会过时。
更新<extension>
元素的href
属性,以包括包装器功能的JNLP文件的URL(相对于codebase
属性中的URL)。 包装器功能的JNLP文件将包括所有其他必需的功能和插件。
最后,更新<property>
元素以包括您产品的ID。 该ID将是插件产品配置文件(即SimpleApp.product
)中的ID。
发布JNLP文件
至此,您已经构建了JNLP文件。 您具有导出可部署功能的功能和插件目录。 该功能包括您的插件以及所有依赖项。 您已经准备好发布JNLP文件。
JNLP文件与features和plugins目录位于同一目录中。 它应该与导出可部署功能时使用的目录相同。 清单5显示了示例目录清单。
清单5.带有JNLP文件的目录清单
drwxr-xr-x 20 user user 680 Dec 19 09:46 features
drwxr-xr-x 280 user user 9520 Dec 19 09:46 plugins
-rw-r--r-- 1 user user 1222 Dec 19 10:05 simpleapp.jnlp
为了便于测试文件,请创建一个简单HTML页面并将其命名为index.html。 它应该包括清单6中所示的代码,其中simpleapp.jnlp被更新为您的JNLP文件的名称。
清单6.示例HTML文件
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>My Application</title>
</head>
<body>
<a href="simpleapp.jnlp">My Application</a>
</body>
</html>
将HTML文件保存在可从应用程序主JNLP文件中的代码库URL访问的文件夹中。 将HTML文件保存在目录中之后,目录清单应类似于清单7。
清单7.所有文件的目录清单
drwxr-xr-x 20 user user 680 Dec 19 09:46 features
-rw-r--r-- 1 user user 288 Dec 19 08:37 index.html
drwxr-xr-x 280 user user 9520 Dec 19 09:46 plugins
-rw-r--r-- 1 user user 1222 Dec 19 10:05 simpleapp.jnlp
测试部署
此时,您:
- 了解JNLP文件的基本结构。
- 使用适当的MIME类型配置您的Web服务器。
- 在插件项目中构建基本的Eclipse产品。
- 有一个包含插件的包装器功能项目。
- 将包装器功能导出到目录。
- 为您的应用程序创建并保存了一个JNLP文件。
现在该测试部署了。 打开Web浏览器,然后导航到为代码库URL提供的URL(例如,http:// localhost /〜user / jws /)。 您将在“发布JNLP文件”部分中创建的index.html文件出现。 点击链接。 如果一切都已正确配置,则应该显示JWS的初始屏幕(请参见图18)。 然后,出现下载应用程序的进度。 根据功能和插件的最终大小以及网络连接,此过程可能需要一些时间。
图18. JWS初始屏幕
下载所有依赖项后,将打开应用程序。 我的简单视图如图19所示。
图19.从JWS开始的简单应用程序
故障排除
在构建通过JWS部署Eclipse产品的第一个示例时,我遇到了两个问题:
- JNLP文件在浏览器中显示为文本。 如果发生这种情况,最可能的原因是Web服务器配置中的JNLP类型缺少MIME类型关联。 确保关联了正确的MIME类型(请参阅“配置Web服务器”部分)。
- 无法启动应用程序。 如果从JWS收到此错误,请单击“ 详细信息”以获取有关该错误的更多信息。 如果错误是
java.io.FileNotFoundException
,则可能是URL不正确。 重命名初始的JNLP文件时收到此错误,但忘记更新<jnlp>
元素的href
属性中的值。 - 无法加载资源。 与上一个错误类似,单击“ 详细信息”后,此消息可见。 尝试在另一台计算机上测试应用程序时出现此错误。 在本示例的URL中,我使用localhost作为主机名。 要解决此问题,请将URL更改为要在其上发布JNLP文件的服务器的IP地址或主机名。
- JWS似乎已启动,但看不到任何内容,并且JWS关闭。 造成此问题的最可能原因是
<resources>
元素中eclipse.product
属性中的产品ID不正确。 仔细检查产品ID的值,并确保它与产品配置文件(SimpleApp.product)中的ID匹配。
摘要
本教程演示了如何构建一个简单的产品—一个基于Eclipse平台构建的应用程序—并使用JWS将其部署到您的用户。 通过执行此处的步骤并添加您自己的扩展,您可以构建可以从中央位置部署到许多平台的复杂应用程序。 更新就像将更新部署到部署JWS资源的目录一样容易。
要成功构建产品,您需要对JNLP文件的结构有所了解。 您需要使用至少两个类的实现来构建一个插件。 您需要在插件中提供扩展点。 最后,您需要向插件项目中添加产品配置。
插件项目完成后,您需要构建一个包装器功能,其中包括您的插件以及运行该插件所需的所有其他功能和插件。 完成包装器功能后,可以使用Eclipse向导将必要的文件部署到目录结构中。
一个简单的JNLP文件包含对您创建的包装器功能的JNLP文件的引用。 它还包含使Eclipse运行产品所需的任何其他参数,例如启动产品ID。
翻译自: https://www.ibm.com/developerworks/opensource/tutorials/os-eclipse-jws/index.html