java提供的一种让你可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个 java应 用程序.好处就不用说了,如果你的java应用程序以jnlp 的方式发布,如果版本升级后,不需要再向所有用户发布版本,只需要更新服务器的版本,这就相当于让java应用程序有了web应用的优点了.
jnlp文件的具体说明:
应用JNLP部署应用
(1)编写相关应用,打包成一系列jar;
(2)根据jnlp文件说明修改相应的jnlp内容,修改相应的url和jar;
(3)部署jnlp文件和jar到相应的web容器;
(4)编写访问网页,即可使用该应用〔亦可下载jnlp文件使用jws运行应用〕;
补充:如果jar需要访问本地文件资源,需要为你的jar文件签名
之前做过的一个系统部署如下:
1使用ant文件进行打包生成相应的jar文件,及进行文件签名等,生成工程所需的所有架包文件到指定到某个工程目录下,然后指定签证的路径(一般是指定到登陆客户端的project下)
2打好包之后,所有的架包都需要在login的页面加入以下代码;
ant 文件:
以上为一个C/S架构系统的每次发布的流程
1使用ant文件编译,生成jar
2 生成签证
3在登陆客户端保证好与签证中的jary版本一样
4 给打好的架放入到服务器启动成功即可,登陆客户端 在下载客户端程序认证成功。
jnlp文件的具体说明:
应用JNLP部署应用
(1)编写相关应用,打包成一系列jar;
(2)根据jnlp文件说明修改相应的jnlp内容,修改相应的url和jar;
(3)部署jnlp文件和jar到相应的web容器;
(4)编写访问网页,即可使用该应用〔亦可下载jnlp文件使用jws运行应用〕;
补充:如果jar需要访问本地文件资源,需要为你的jar文件签名
之前做过的一个系统部署如下:
1使用ant文件进行打包生成相应的jar文件,及进行文件签名等,生成工程所需的所有架包文件到指定到某个工程目录下,然后指定签证的路径(一般是指定到登陆客户端的project下)
2打好包之后,所有的架包都需要在login的页面加入以下代码;
<jnlp codebase="<%=realPath%>"> <information> <title>Transfers-inforesRES-参数开通平台</title> <vendor> ... </vendor> </information> <resources> //所有的架包,都绑定了版本号,每次发布都需要给本地工程的jar +1,例如 :paraClient.jar <j2se version="1.5+" java-vm-args="-Xms64m -Xmx512m" /> <jar href="parasigned/paraClient.jar" version="1.1"/> <jar href="parasigned/rc_res.jar" version="1.1"/> <jar href="parasigned/ant.jar" version="1.0"/> <jar href="parasigned/antlr-2.7.6.jar" version="1.0"/> <jar href="parasigned/asm-2.2.3.jar" version="1.0"/> <jar href="parasigned/aspectjrt.jar" version="1.0"/> <jar href="parasigned/aspectjweaver.jar" version="1.0"/> <jar href="parasigned/cglib-nodep-2.1_3.jar" version="1.0"/> <jar href="parasigned/com.springsource.com.caucho-3.1.6.jar" version="1.0"/> <jar href="parasigned/commons-beanutils.jar" version="1.0"/> <jar href="parasigned/commons-io-1.3.2.jar" version="1.0"/> <jar href="parasigned/commons-lang.jar" version="1.0"/> <jar href="parasigned/commons-logging-1.1.1.jar" version="1.0"/> <jar href="parasigned/dozer-5.0.jar" version="1.0"/> <jar href="parasigned/flexjson.jar" version="1.0"/> <jar href="parasigned/forms-1.2.1.jar" version="1.0"/> <jar href="parasigned/jakarta-oro-2.0.8.jar" version="1.0"/> <jar href="parasigned/jakarta-regexp-1.5.jar" version="1.0"/> <jar href="parasigned/jcalendar.jar" version="1.0"/> <jar href="parasigned/jdom.jar" version="1.0"/> <jar href="parasigned/jide-oss-2.5.3.jar" version="1.0"/> <jar href="parasigned/JImage.jar" version="1.0"/> <jar href="parasigned/jwf-1.0.1.jar" version="1.0"/> <jar href="parasigned/jxl.jar" version="1.0"/> <jar href="parasigned/jxls-core-0.9.8.jar" version="1.0"/> <jar href="parasigned/jxls-reader-0.9.8.jar" version="1.0"/> <jar href="parasigned/log4j-1.2.15.jar" version="1.0"/> <jar href="parasigned/looks.jar" version="1.0"/> <jar href="parasigned/neethi-2.0.4.jar" version="1.0"/> <jar href="parasigned/OpenSwing.jar" version="1.1"/> <jar href="parasigned/OpenSwingBeanInfo.jar" version="1.0"/> <jar href="parasigned/poi-3.2-FINAL-20081019.jar" version="1.0"/> <jar href="parasigned/poi-contrib-3.2-FINAL-20081019.jar" version="1.0"/> <jar href="parasigned/poi-scratchpad-3.2-FINAL-20081019.jar" version="1.0"/> <jar href="parasigned/simple-json.jar" version="1.0"/> <jar href="parasigned/slf4j-api-1.5.0.jar" version="1.0"/> <jar href="parasigned/slf4j-log4j12-1.5.0.jar" version="1.0"/> <jar href="parasigned/spring.jar" version="1.0"/> <jar href="parasigned/swing-layout.jar" version="1.0"/> <jar href="parasigned/twaver.jar" version="1.0"/> <jar href="parasigned/substance.jar" version="1.0"/> <jar href="parasigned/DJNativeSwing.jar" version="1.0"/> <jar href="parasigned/DJNativeSwing-SWT.jar" version="1.0"/> <jar href="parasigned/jna_WindowUtils.jar" version="1.0"/> <jar href="parasigned/jna-3.2.4.jar" version="1.0"/> <jar href="parasigned/MozillaInterfaces-1.8.1.3.jar" version="1.0"/> <jar href="parasigned/swt-3.6M6-win32-win32-x86.jar" version="1.0"/> <jar href="parasigned/dom4j-1.6.1.jar" version="1.0"/> <jar href="parasigned/commons-collections-3.1.jar" version="1.0"/> </resources> <security> <all-permissions /> </security> //登陆时候需要认证的参数; <application-desc main-class="Launch"> <argument><%=URL%></argument> <argument><%=port%></argument> <argument><%=staffcode%></argument> <argument><%=passwdMd5%></argument> <argument>product</argument> <argument><%=SysCode%></argument> <argument><%=timestamp%></argument> </application-desc> </jnlp>
ant 文件:
<?xml version="1.0"?> <project name="backend" default="upload"> <description> This is the build.xml for ant in the ddz project </description> <property environment="env" /> <property name="base.dir" value="." /> <property name="shared.dir" value="../rcSharedProject" /> <property name="project.name" value="backend" /> <property name="application.name" value="lobby" /> <target name="detect.file" > <echo>正在检查是否存在${base.dir}/build-${user.name}.properties文件....</echo> <condition property="fileIsExists" > <and> <available file="${base.dir}/build-${user.name}.properties"/> </and> </condition> </target> <target name="loadUserProperty" if="fileIsExists" depends="detect.file"> <echo>存在${base.dir}/build-${user.name}.properties文件....</echo> <property file="${base.dir}/build-${user.name}.properties"/> </target> <target name="loadDefaultProperty" unless="fileIsExists" depends="loadUserProperty"> <echo>不存在${base.dir}/build-${user.name}.properties文件!使用默认TOMCAT配置..</echo> <property file="build.properties"/> </target> <target name="init" depends="loadDefaultProperty"> <echo>tomcat.root=${tomcat.root}/</echo> <property name="app.root" value="${tomcat.root}/webapps/${application.name}" /> <property name="cache.root" value="${tomcat.root}/work/Catalina/localhost/${application.name}" /> <property name="base.dir" value="." /> <property name="shared.dir" value="../transSharedProject" /> <property name="global.dir" value="${shared.dir}/global" /> <property name="domains.dir" value="${shared.dir}/domains" /> <property name="servicesInterface.dir" value="${shared.dir}/services" /> <property name="uis.dir" value="${base.dir}/UIS" /> <property name="config.dir" value="${base.dir}/config" /> <property name="classes.dir" value="${base.dir}/publish/classes" /> <property name="WebRoot.dir" value="${base.dir}/WebRoot" /> <property name="lib.dir" value="${base.dir}/lib" /> <property name="dist.dir" value="${base.dir}/publish/dist" /> <property name="jarfile" value="${project.name}.jar" /> <property name="publish.dir" value="${base.dir}/publish" /> <path id="classpath"> <fileset dir="${lib.dir}"> <include name="*.jar" /> </fileset> <path location="${classes.dir}" /> </path> <mkdir dir="${classes.dir}" /> <mkdir dir="${dist.dir}" /> </target> <!-- 数字签名用的密钥信息参数 --> <property name="keystoreName" value="gpdi.inforessystem"/> <property name="storepass" value="gpdi.inforessystem"/> <property name="keystore" location="${base.dir}/publish/${keystoreName}"/> <property name="keypass" value="gpdi.inforessystem"/> <property name="keysize" value="1024"/> <property name="alias" value="gpdi.inforessystem"/> <property name="validity" value="3650"/> <target name="compile" depends="init"> <copy todir="${dist.dir}"> <fileset dir="${uis.dir}"> <include name="**" /> </fileset> <fileset dir="${global.dir}"> <include name="**" /> </fileset> <fileset dir="${domains.dir}"> <include name="**" /> </fileset> <fileset dir="${servicesInterface.dir}"> <include name="**" /> </fileset> </copy> <javac srcdir="${dist.dir}" encoding="utf-8" destdir="${classes.dir}" includes="**" debug="on"> <classpath refid="classpath" /> </javac> <copy todir="${classes.dir}"> <fileset dir="${uis.dir}"> <include name="**" /> </fileset> <fileset dir="${config.dir}"> <include name="**" /> </fileset> <fileset dir="${domains.dir}"> <include name="**" /> </fileset> </copy> </target> <target name="jar" depends="compile"> <mkdir dir="${publish.dir}" /> <mkdir dir="${publish.dir}/lib" /> <mkdir dir="${publish.dir}/signed" /> <jar destfile="${publish.dir}/lib/${jarfile}"> <fileset dir="${classes.dir}"> <include name="**" /> </fileset> </jar> <copy todir="${publish.dir}/lib"> <fileset dir="${lib.dir}"> <include name="*.jar" /> </fileset> </copy> <copy todir="${publish.dir}"> <fileset dir="${base.dir}"> <include name="*.bat" /> </fileset> </copy> </target> <!-- 创建证书 --> <target name="genericKey"> <echo message="genkey..."/> <delete> <fileset dir="${base.dir}/publish"> <include name="${keystoreName}"/> </fileset> </delete> <genkey keystore="${keystore}" storepass="${storepass}" alias="${alias}" keypass="${keypass}" keysize="${keysize}" verbose="true" validity="${validity}" dname="CN=GPDI, OU=Infores, O=gpdi.com, C=ZH"> </genkey> <echo message="genkey... done"/> </target> <!-- 对JAR进行数字签名 --> <target name="signJar" depends="jar, genericKey"> <echo message="jarsigner..." /> <delete> <fileset dir="${base.dir}/publish/signed"> <include name="**.jar"/> </fileset> </delete> <signjar destDir="${base.dir}/publish/signed" alias="${alias}" keystore="${keystore}" storepass="${storepass}"> <path> <fileset dir="${base.dir}/publish/lib" includes="**.jar" /> </path> <flattenmapper /> </signjar> <echo message="jarsigner... done." /> </target> <target name="clean-cache" depends="signJar"> <mkdir dir="${cache.root}" /> <delete> <fileset dir="${cache.root}"> <include name="**"/> </fileset> </delete> </target> <target name="deploy" depends="clean-cache"> <mkdir dir="${app.root}" /> <mkdir dir="${app.root}/signed" /> <mkdir dir="${app.root}/WEB-INF" /> <mkdir dir="${app.root}/WEB-INF/lib" /> <mkdir dir="${app.root}/WEB-INF/classes" /> <!--<copy todir="${app.root}/"> <fileset dir="${WebRoot.dir}"> <include name="**" /> </fileset> </copy>--> <copy todir="${app.root}/signed"> <fileset dir="${base.dir}/publish/signed"> <include name="**.jar" /> </fileset> </copy> </target> <target name="upload" depends="clean-cache"> <mkdir dir="${app.root}" /> <mkdir dir="${app.root}/signed" /> <mkdir dir="${app.root}/WEB-INF" /> <mkdir dir="${app.root}/WEB-INF/lib" /> <mkdir dir="${app.root}/WEB-INF/classes" /> <!--<copy todir="${app.root}/"> <fileset dir="${WebRoot.dir}"> <include name="**" /> </fileset> </copy>--> <copy todir="${app.root}/signed"> <fileset dir="${base.dir}/publish/signed"> <include name="**.jar" /> </fileset> </copy> <copy todir="${app.root}"> <fileset dir="${base.dir}/publish"> <include name="start.bat" /> </fileset> </copy> </target> <!-- 远程部署TOMCAT属性 <property name="server.address" value="211.155.23.240" /> <property name="server.sshport" value="22" /> <property name="server.tomcat.port" value="8080" /> <property name="server.tomcat.service" value="Tomcat6" /> <property name="server.tomcat.path" value="D:\env\apache-tomcat-6.0.14\webapps" /> <property name="server.username" value="gpdi.infores" /> <property name="server.password" value="1qaz2wsx" /> --> <target name="detect"> <condition property="tomcat.running" > <and> <socket server="${server.address}" port="${server.tomcat.port}" /> </and> </condition> </target> <target name="tomcat.stop" if="tomcat.running" description="停止TOMCAT" depends="init"> <echo> rexec 到${server.address}</echo> <echo message="正在停止TOMCAT..." /> <sshexec host="${server.address}" username="${server.username}" password="${server.password}" port="${server.sshport}" trust="true" command="net stop ${server.tomcat.service}"/> <waitfor> <not> <socket server="${server.address}" port="${server.tomcat.port}" /> </not> </waitfor> </target> <target name="tomcat.start" description="modify application database and sysid" depends="init"> <echo> rexec 到${server.address}</echo> <echo message="正在启动TOMCAT..." /> <sshexec host="${server.address}" username="${server.username}" password="${server.password}" port="${server.sshport}" trust="true" command="net start ${server.tomcat.service}"/> <waitfor> <and> <socket server="${server.address}" port="${server.tomcat.port}" /> </and> </waitfor> </target> <!--增量上传: 把所有自己写的代码打包JAR包 --> <target name="uploadJarToServer" depends="init"> <scp todir="${server.username}:${server.password}@${server.address}:${server.tomcat.path}\${application.name}" trust="true" verbose="true" port="${server.sshport}" > <fileset dir="${base.dir}/publish/"> <include name="signed" /> <include name="signed/**" /> </fileset> </scp> </target> <!-- 增量上传 --> <target name="增量上传" depends="init,detect, tomcat.stop,uploadJarToServer,tomcat.start"></target> </project>
登陆时候的lauch: import java.util.Map; import javax.swing.JFrame; import javax.swing.WindowConstants; import cn.dcalf.swing.WindowUtils; import cn.dcalf.util.ClientLaunchArgs; import com.gpdi.infores.client.util.MsgDlgFuns; import com.gpdi.infores.global.client.GlobalVars; import com.gpdi.infores.global.client.MyUIManager; import com.gpdi.infores.rc.start.client.LoginFrame; import com.gpdi.infores.rc.start.client.MainFrame; import com.gpdi.infores.rc.task.OnlineUserSynTask; public class Launch { /** * 启动程序 * * @param args */ public static void main(String[] args) { Map<String,String> argMap = ClientLaunchArgs.getArgMap(args); if (argMap==null || argMap.get(ClientLaunchArgs.IP)==null){ MsgDlgFuns.showMsg("非法的传入参数。"); return; } try { GlobalVars.setAddress(argMap.get(ClientLaunchArgs.IP)); GlobalVars.setPort(argMap.get(ClientLaunchArgs.PORT)); GlobalVars.setVersion(argMap.get(ClientLaunchArgs.VERSION)); GlobalVars.setProjectId(argMap.get(ClientLaunchArgs.PROJECT_ID)); GlobalVars.getInstance(); MyUIManager.init(); OnlineUserSynTask.setStartWork(false); String staffcode = argMap.get(ClientLaunchArgs.USER); String password = argMap.get(ClientLaunchArgs.PASSWORD); String timestatmp=argMap.get(ClientLaunchArgs.TIMESTAMP); if (timestatmp==null) timestatmp="0"; String sysCode = argMap.get(ClientLaunchArgs.SYSTEM_CODE); if(staffcode!=null && !staffcode.isEmpty()){ boolean result = false; if(sysCode!=null && !sysCode.isEmpty()){ result = GlobalVars.getInstance().auhenticate(staffcode, password, sysCode , timestatmp); }else{ result = GlobalVars.getInstance().auhenticate(staffcode, password,null,timestatmp); } if(!result){ GlobalVars.getInstance().showErrorDialog("登录验证失败,用户名/密码错误,或者登录超时(30分钟)."); System.exit(0); return; } java.awt.EventQueue.invokeLater(new Runnable() { public void run() { //JFrame main = new MainFrame(); JFrame main = MainFrame.getInstance(); String title = GlobalVars.getInstance().buildTitle(); main.setTitle(title); main.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); main.setExtendedState(JFrame.MAXIMIZED_BOTH); WindowUtils.center(main); main.setVisible(true); } }); }else{ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame(); String title = GlobalVars.getInstance().getConfigValueByName("system.title"); frame.setTitle(title); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); LoginFrame panel = new LoginFrame(frame); panel.setVisible(true); try{ panel.requestFocus(); }catch(Exception e){ } } }); } } catch (Exception e) { e.printStackTrace(); } } }
生成的数字签证:version.xml <jnlp-versions> <resource> <pattern> <name>rcClient.jar</name> <version-id>1.0</version-id> </pattern> <file>rcClient.jar</file> </resource> <resource> <pattern> <name>rc_res.jar</name> <version-id>1.1</version-id> </pattern> <file>rc_res.jar</file> </resource> <resource> <pattern> <name>ant.jar</name> <version-id>1.0</version-id> </pattern> <file>ant.jar</file> </resource> <resource> <pattern> <name>antlr-2.7.6.jar</name> <version-id>1.0</version-id> </pattern> <file>antlr-2.7.6.jar</file> </resource> <resource> <pattern> <name>asm-2.2.3.jar</name> <version-id>1.0</version-id> </pattern> <file>asm-2.2.3.jar</file> </resource> <resource> <pattern> <name>aspectjrt.jar</name> <version-id>1.0</version-id> </pattern> <file>aspectjrt.jar</file> </resource> <resource> <pattern> <name>aspectjweaver.jar</name> <version-id>1.0</version-id> </pattern> <file>aspectjweaver.jar</file> </resource> <resource> <pattern> <name>cglib-nodep-2.1_3.jar</name> <version-id>1.0</version-id> </pattern> <file>cglib-nodep-2.1_3.jar</file> </resource> <resource> <pattern> <name>com.springsource.com.caucho-3.1.6.jar</name> <version-id>1.0</version-id> </pattern> <file>com.springsource.com.caucho-3.1.6.jar</file> </resource> <resource> <pattern> <name>commons-beanutils.jar</name> <version-id>1.0</version-id> </pattern> <file>commons-beanutils.jar</file> </resource> <resource> <pattern> <name>commons-io-1.3.2.jar</name> <version-id>1.0</version-id> </pattern> <file>commons-io-1.3.2.jar</file> </resource> <resource> <pattern> <name>commons-lang.jar</name> <version-id>1.0</version-id> </pattern> <file>commons-lang.jar</file> </resource> <resource> <pattern> <name>commons-logging-1.1.1.jar</name> <version-id>1.0</version-id> </pattern> <file>commons-logging-1.1.1.jar</file> </resource> <resource> <pattern> <name>dozer-5.0.jar</name> <version-id>1.0</version-id> </pattern> <file>dozer-5.0.jar</file> </resource> <resource> <pattern> <name>flexjson.jar</name> <version-id>1.0</version-id> </pattern> <file>flexjson.jar</file> </resource> <resource> <pattern> <name>forms-1.2.1.jar</name> <version-id>1.0</version-id> </pattern> <file>forms-1.2.1.jar</file> </resource> <resource> <pattern> <name>jakarta-oro-2.0.8.jar</name> <version-id>1.0</version-id> </pattern> <file>jakarta-oro-2.0.8.jar</file> </resource> <resource> <pattern> <name>jakarta-regexp-1.5.jar</name> <version-id>1.0</version-id> </pattern> <file>jakarta-regexp-1.5.jar</file> </resource> <resource> <pattern> <name>jcalendar.jar</name> <version-id>1.0</version-id> </pattern> <file>jcalendar.jar</file> </resource> <resource> <pattern> <name>jdom.jar</name> <version-id>1.0</version-id> </pattern> <file>jdom.jar</file> </resource> <resource> <pattern> <name>jide-oss-2.5.3.jar</name> <version-id>1.0</version-id> </pattern> <file>jide-oss-2.5.3.jar</file> </resource> <resource> <pattern> <name>JImage.jar</name> <version-id>1.0</version-id> </pattern> <file>JImage.jar</file> </resource> <resource> <pattern> <name>jwf-1.0.1.jar</name> <version-id>1.0</version-id> </pattern> <file>jwf-1.0.1.jar</file> </resource> <resource> <pattern> <name>jxl.jar</name> <version-id>1.0</version-id> </pattern> <file>jxl.jar</file> </resource> <resource> <pattern> <name>jxls-core-0.9.8.jar</name> <version-id>1.0</version-id> </pattern> <file>jxls-core-0.9.8.jar</file> </resource> <resource> <pattern> <name>jxls-reader-0.9.8.jar</name> <version-id>1.0</version-id> </pattern> <file>jxls-reader-0.9.8.jar</file> </resource> <resource> <pattern> <name>log4j-1.2.15.jar</name> <version-id>1.0</version-id> </pattern> <file>log4j-1.2.15.jar</file> </resource> <resource> <pattern> <name>looks.jar</name> <version-id>1.0</version-id> </pattern> <file>looks.jar</file> </resource> <resource> <pattern> <name>neethi-2.0.4.jar</name> <version-id>1.0</version-id> </pattern> <file>neethi-2.0.4.jar</file> </resource> <resource> <pattern> <name>OpenSwing.jar</name> <version-id>1.1</version-id> </pattern> <file>OpenSwing.jar</file> </resource> <resource> <pattern> <name>OpenSwingBeanInfo.jar</name> <version-id>1.0</version-id> </pattern> <file>OpenSwingBeanInfo.jar</file> </resource> <resource> <pattern> <name>poi-3.2-FINAL-20081019.jar</name> <version-id>1.0</version-id> </pattern> <file>poi-3.2-FINAL-20081019.jar</file> </resource> <resource> <pattern> <name>poi-contrib-3.2-FINAL-20081019.jar</name> <version-id>1.0</version-id> </pattern> <file>poi-contrib-3.2-FINAL-20081019.jar</file> </resource> <resource> <pattern> <name>poi-scratchpad-3.2-FINAL-20081019.jar</name> <version-id>1.0</version-id> </pattern> <file>poi-scratchpad-3.2-FINAL-20081019.jar</file> </resource> <resource> <pattern> <name>simple-json.jar</name> <version-id>1.0</version-id> </pattern> <file>simple-json.jar</file> </resource> <resource> <pattern> <name>slf4j-api-1.5.0.jar</name> <version-id>1.0</version-id> </pattern> <file>slf4j-api-1.5.0.jar</file> </resource> <resource> <pattern> <name>slf4j-log4j12-1.5.0.jar</name> <version-id>1.0</version-id> </pattern> <file>slf4j-log4j12-1.5.0.jar</file> </resource> <resource> <pattern> <name>spring.jar</name> <version-id>1.0</version-id> </pattern> <file>spring.jar</file> </resource> <resource> <pattern> <name>swing-layout.jar</name> <version-id>1.0</version-id> </pattern> <file>swing-layout.jar</file> </resource> <resource> <pattern> <name>twaver.jar</name> <version-id>1.0</version-id> </pattern> <file>twaver.jar</file> </resource> <resource> <pattern> <name>substance.jar</name> <version-id>1.0</version-id> </pattern> <file>substance.jar</file> </resource> <resource> <pattern> <name>DJNativeSwing.jar</name> <version-id>1.0</version-id> </pattern> <file>DJNativeSwing.jar</file> </resource> <resource> <pattern> <name>DJNativeSwing-SWT.jar</name> <version-id>1.0</version-id> </pattern> <file>DJNativeSwing-SWT.jar</file> </resource> <resource> <pattern> <name>jna_WindowUtils.jar</name> <version-id>1.0</version-id> </pattern> <file>jna_WindowUtils.jar</file> </resource> <resource> <pattern> <name>jna-3.2.4.jar</name> <version-id>1.0</version-id> </pattern> <file>jna-3.2.4.jar</file> </resource> <resource> <pattern> <name>MozillaInterfaces-1.8.1.3.jar</name> <version-id>1.0</version-id> </pattern> <file>MozillaInterfaces-1.8.1.3.jar</file> </resource> <resource> <pattern> <name>swt-3.6M6-win32-win32-x86.jar</name> <version-id>1.0</version-id> </pattern> <file>swt-3.6M6-win32-win32-x86.jar</file> </resource> <resource> <pattern> <name>dom4j-1.6.1.jar</name> <version-id>1.0</version-id> </pattern> <file>dom4j-1.6.1.jar</file> </resource> <resource> <pattern> <name>pipeline.jar</name> <version-id>1.0</version-id> </pattern> <file>pipeline.jar</file> </resource> <resource> <pattern> <name>jRegistryKey.jar</name> <version-id>1.0</version-id> </pattern> <file>jRegistryKey.jar</file> </resource> <resource> <pattern> <name>jRegistryKey.dll.jar</name> <version-id>1.0</version-id> </pattern> <file>jRegistryKey.dll.jar</file> </resource> <resource> <pattern> <name>commons-collections-3.1.jar</name> <version-id>1.0</version-id> </pattern> <file>commons-collections-3.1.jar</file> </resource> </jnlp-versions>
以上为一个C/S架构系统的每次发布的流程
1使用ant文件编译,生成jar
2 生成签证
3在登陆客户端保证好与签证中的jary版本一样
4 给打好的架放入到服务器启动成功即可,登陆客户端 在下载客户端程序认证成功。
发表评论
-
12306模型设计探讨
2016-04-28 14:10 700春节期间,无意中看到 ... -
Dubbo与Zookeeper、SpringMVC整合
2016-03-18 16:31 871互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构 ... -
TCP/IP,http,socket,长连接,短连接
2016-03-18 16:22 814TCP/IP TCP/IP是个协议组,可分为三个层次:网络层 ... -
移动互联网App客户端服务端通信安全问题。
2016-01-20 12:13 1620作为一个移动互联网App,天生是需要和服务器通信的。那么,服 ... -
前后端分离开发部署模式
2015-12-12 11:10 9812这周着手开始重新构 ... -
Jenkins + Git + Maven + tomcat集成环境(转)
2015-11-07 11:01 12579折腾了好几天,终于吧Jenkins + Git ... -
Apache Commons(转)
2012-08-31 11:36 836Apache Commons包含了很多开源的工具,用于解决平时 ... -
Cron 常用表达式
2012-08-31 11:34 2943Cron 常用表达式 <SELECT NAME=&qu ... -
httpSession的正确理解
2012-07-20 12:43 855httpSession的正确理解 ... -
利用Session防止表单重复提交
2012-07-20 10:01 3092为什么需要防止表单重复提交呢? 重复提交不仅仅是验证的问题 ... -
图片码
2012-05-08 11:34 1256直接切入主题,2年前写的一个图片码,记录一下。 1 生成图片 ... -
Spring Quartz 调度与Jdk Timer
2012-05-08 10:14 1901,最近经历的几个项目大多里面都使用到Spring Quart ... -
Dozer 深层次复制
2012-05-07 15:04 7897最近在做项目上遇到了 ... -
使用FreeMarker生成java代码
2012-05-07 14:36 36831 编写ftl模版; 2 编写java生成类(主要用来设置好 ...
相关推荐
JNLP 新手开发把手教 JNLP(Java Network Launching Protocol)是一种通过网络部署和发布 Java 程序的新技术,它可以用来发布 Application,也可以用来发布 Applet。JNLP 的主要特点是安全、稳定、易维护、易使用。...
标题 "JNLP" 指的是 Java Network Launch Protocol,这是一种由Java平台提供的技术,用于在网络上启动和运行Java应用程序。JNLP是Java Web Start的一部分,允许用户在浏览器或者独立的桌面环境中无缝地下载、安装和...
### JNLP开发(JWS):深入了解与实践 #### JNLP与Java WebStart:概念解析 JNLP(Java Network Launching Protocol),作为一项由Sun Microsystems在2000年提出的规范(JSR 56),为Java应用程序提供了一种通过...
jenkins-jnlp-slave镜像
标题“JNLP ant webstart sign genkey sample”涉及到的是Java网络启动(Java Web Start,JWS)技术,以及如何使用Ant构建工具来签名JNLP应用。在Java Web Start中,JNLP(Java Network Launch Protocol)是用于启动...
这个"jnlp详细文档"可能是关于如何使用JNLP文件进行Java Web Start应用部署的指南。 在Java Web Start中,JNLP文件扮演着至关重要的角色。它提供了以下关键信息: 1. **应用元数据**:JNLP文件包含关于应用程序的...
本文将深入探讨如何在Web环境中检测用户系统上的JRE版本,并通过Java Network Launch Protocol (JNLP)文件直接启动应用程序。 首先,我们要了解如何检测用户的JRE版本。这通常通过JavaScript实现,因为JavaScript...
Java Web Start(JNLP,Java Network Launch Protocol)是Java平台提供的一种技术,用于在网络上启动基于Java的应用程序。它提供了一种安全、便捷的方式,让用户能够通过点击一个链接来下载和运行Java应用,无需手动...
标题 "jfreechart-1.0.8-demo.jnlp" 指示的是一个基于JFreeChart库的1.0.8版本的演示程序,其中可能包含了展示JFreeChart功能的各种图表示例。JFreeChart是一个开源Java库,用于创建高质量的、可定制的图表,包括...
用jnlp开启一个服务,实现本地桌面远程共享
java哪里都好用,不会就用jnlp来下载JAVA吧,就用它来下载,很不错的下载软件
maven-jnlp-plugin-1.4.jar
https://blog.csdn.net/weixin_46560589/article/details/128801979 文章《【Kubernetes 企业项目实战】06、基于 Jenkins+K8s 构建 DevOps 自动化运维管理平台(中)》测试 jenkins 的 CI/CD 实验所需资料文件!
《Ant-JNLP-WAR_Deps-0.9.jar.zip:构建Java Web应用程序的利器》 在Java开发领域,Ant和JNLP是两个至关重要的工具,它们在构建和部署Web应用程序时起着核心作用。Ant是Apache软件基金会的一个项目,提供了一种基于...
这个压缩包"libgdx-0.9.2|hiero.jnlp"显然包含了LibGDX的一个早期版本0.9.2以及一个名为"Hiero"的工具。Hiero是LibGDX提供的一款字体渲染和纹理图集生成工具,对于游戏开发者来说尤其重要,因为它可以帮助优化游戏...
提供了使用jfreechar能完成的15大类的图,比如柱状图,饼图等。
通过PC鼠标键盘操控手机:androidscreencast.jnlp应用 具体使用介绍可参考博文:http://blog.csdn.net/netwalk/article/details/17319559 使用androidscreencast.jnlp,可通过鼠标和键盘操作手机,并且可实时将...
标题中的"apache-airavata-xbaya-gui-0.6-jnlp.tar.gz"是一个软件包,源自Apache Airavata项目,版本为0.6,且是通过Java Network Launch Protocol (JNLP)来运行的图形用户界面(GUI)。这个压缩包文件采用tar.gz格式...