java swing项目打安装包 ant+exe4j+inno setup

 

我的swing项目用的NetBeans开发

项目目录

 

exe4j目录

innosetup目录

 

一.打jar包

NetBeans可生成jar包

http://happyqing.iteye.com/blog/2064370

Eclipse也可以导出jar包

我是采用ant生成jar包

优点:可以自定义,去掉有些不需要的类,自定义生成的META-INF\MANIFEST.MF文件,指定Class-Path

buildProject.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!--
1. 使用ant的javac命令来编译Java程序
2. 使用jar命令打包java项目
3. 使用war命令打包JavaEE项目
-->
<project name="docProject" default="copy" basedir="../">
	
        <!--属性-->
	<property name="build" value="${basedir}/ant" />
	<property name="classes" value="${basedir}/bin/" />
	<property name="lib" value="${basedir}/lib" />
        <property name="jar" value="${build}/jar" />
        <property name="exe4j" value="${basedir}/exe4j" />
	
	<!--编译用的classpath-->
	<path id="classpath">
		<fileset dir="${lib}">
			<include name="*.jar"/>
		</fileset>
	</path>

	<!-- 清理 -->
	<target name="clean">
		<echo message ="java_home:${java.home}"/>
		<delete includeemptydirs="true">
			<fileset dir="${classes}">
				<include name="**/*" />
			</fileset>
		</delete>
                <delete file="${jar}/docProject.jar" />
	</target>
	
	<!-- 编译 -->
	<target name="compile" depends="clean">
		<!-- warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds -->
		<!-- 设置 includeantruntime="on" 或者 includeantruntime="false" Ant是否把它自己的 runtime包含进对 javac任务可见的classpath中 -->
                <javac encoding="utf-8" srcdir="${basedir}/src" destdir="${classes}" includeantruntime="false" bootclasspath="${java.home}/lib/rt.jar;${java.home}/lib/jce.jar" excludes="/com/urt/sample/*.*,/com/urt/license/*.*">
                        <classpath refid="classpath"/>
                        <compilerarg value="-g:lines,vars,source" />
                        <!--
                        <compilerarg value="-Xlint:deprecation" />
                        <compilerarg value="-Xlint:unchecked" />
                        -->
                </javac>

		<copy todir="${classes}" includeEmptyDirs="true" overwrite="true"> 
			<fileset dir="${basedir}/src">
                                <include name="*.properties"/>
                                <include name="/**/*.properties"/>
                                <include name="/images/*.*"/>
			</fileset>
		</copy> 
	</target>

	<!-- 打成jar包 -->
	<target name="jar" depends="compile">
		<pathconvert property="mf.classpath" pathsep=" ">
			<!--<path refid="classpath" />-->
			<path>
				<fileset dir="${lib}">
					<include name="*.jar"/>
				</fileset>
			</path>
                        <mapper>
                    <chainedmapper>
                        <!-- 移除绝对路径 -->
                        <flattenmapper />
                        <!-- 加上lib前缀 -->
                        <globmapper from="*" to="lib/*" />
                    </chainedmapper>
                </mapper>
		</pathconvert>
		
		<jar destfile="${jar}/docProject.jar" basedir="${basedir}/bin">
			<!-- define MANIFEST.MF -->
			<manifest>
				<attribute name="Main-Class" value="com.urt.module.MainFrame"/>
				<attribute name="Class-Path" value="${mf.classpath} "/><!--这个可已没有-->
			</manifest>
		</jar>
	</target>
	
        <!-- 事后清理 -->
	<target name="afterClean" depends="jar">
		<delete includeemptydirs="true">
			<fileset dir="${classes}">
				<include name="**/*" />
			</fileset>
		</delete>
	</target>
        
        <target name="copy" depends="afterClean">
            <copy todir="${exe4j}" includeEmptyDirs="true" overwrite="true"> 
                    <fileset dir="${jar}">
                            <include name="docProject.jar"/>
                    </fileset>
                    <fileset dir="${basedir}/src">
                            <include name="env.properties"/>
                    </fileset>
                    <fileset dir="${basedir}/build/classes">
                            <include name="license.dat"/>
                    </fileset>
            </copy>
        </target>
</project>

 

MANIFEST.MF

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.2
Created-By: 1.7.0_55-b13 (Oracle Corporation)
Main-Class: com.urt.module.MainFrame
Class-Path: lib/commons-lang-2.3.jar lib/commons-logging-1.1.jar lib/d
 om4j-1.6.1.jar lib/pdfbox-app-1.8.4.jar lib/poi-3.9-20121203.jar lib/
 poi-examples-3.9-20121203.jar lib/poi-excelant-3.9-20121203.jar lib/p
 oi-ooxml-3.9-20121203.jar lib/poi-ooxml-schemas-3.9-20121203.jar lib/
 poi-scratchpad-3.9-20121203.jar lib/stax-api-1.0.1.jar lib/xmlbeans-2
 .3.0.jar 

 指定Class-Path为了打好的jar包能找到lib

 

二.jar包打成exe

1.可以用bat to exe(bat2exe)工具,把一个.bat批处理文件打包成exe文件,

我下载的工具文件名是:jfsky.com-ha_Bat_To_Exe_Converter.rar 中文版的



 

docProject.bat

jre7x64\bin\java -jar docProject.jar

可视性:隐藏应用程序,就不显示cmd窗口了。

可设置图标文件

优点:简单,

 

2.用exe4j打包

一键搞定Java桌面应用安装部署 —— exe4j + Inno Setup 带着JRE, 8M起飞

http://www.blogjava.net/huliqing/archive/2008/04/18/193907.html

这篇博客说的比较清楚了

exe4j有32位版,和64位版,要想打包64位应用程序,请下载64为安装包

我下载的是:exe4j_windows-x64_4_5_2.zip

欢迎页右下角是注册信息,自行解决。

 

第4步里边第4小步可配置输出日志 error.log output.log 程序的日志会转发的这上

第4步里边第4小步可配置打包64位应用程序

 

第5步设置Class Path

似乎设置lib目录不管用,我把lib下的jar包一个一个全加上就好了。

 

可以指定图标

优点:可配置输出日志 error.log output.log,

因为我的程序没配置log

exe4j.exe4j

<?xml version="1.0" encoding="UTF-8"?>
<exe4j version="4.5.2" transformSequenceNumber="1">
  <directoryPresets config="D:/zhao/Documents/NetBeansProjects/docProject/exe4j/lib" />
  <application name="docProject" distributionSourceDir="D:/zhao/Documents/NetBeansProjects/docProject/exe4j">
    <languages>
      <principalLanguage id="en" customLocalizationFile="" />
    </languages>
  </application>
  <executable name="docProject" type="1" iconSet="true" iconFile="D:/zhao/Documents/NetBeansProjects/docProject/src/images/docProject.ico" executableDir="." redirectStderr="true" stderrFile="error.log" stderrMode="overwrite" redirectStdout="true" stdoutFile="output.log" stdoutMode="overwrite" failOnStderrOutput="true" executableMode="1" changeWorkingDirectory="true" workingDirectory="." singleInstance="false" serviceStartType="2" serviceDependencies="" serviceDescription="" jreLocation="" executionLevel="asInvoker" checkConsoleParameter="false" globalSingleInstance="false" amd64="true">
    <messageSet />
    <versionInfo include="true" fileVersion="" fileDescription="" legalCopyright="我的公司 2014" internalName="测试项目" productName="" companyName="我的公司" productVersion="1.0" />
  </executable>
  <splashScreen show="false" autoOff="true" alwaysOnTop="true" width="0" height="0" bitmapFile="" java6SplashScreen="false">
    <text>
      <statusLine x="20" y="20" text="" font="Arial" fontSize="8" fontColor="0,0,0" fontWeight="500" />
      <versionLine x="20" y="40" text="version %VERSION%" font="Arial" fontSize="8" fontColor="0,0,0" fontWeight="500" />
    </text>
  </splashScreen>
  <java mainClass="com.urt.module.MainFrame" vmParameters="-Xms128m -Xmx2048m -XX:MaxPermSize=256m" arguments="" allowVMPassthroughParameters="true" preferredVM="" bundleRuntime="true" minVersion="1.7" maxVersion="" allowBetaVM="false" jdkOnly="false">
    <searchSequence>
      <directory location="./jre7x64" />
    </searchSequence>
    <classPath>
      <archive location="./docProject.jar" failOnError="false" />
      <archive location="./lib/commons-lang-2.3.jar" failOnError="false" />
      <archive location="./lib/commons-logging-1.1.jar" failOnError="false" />
      <archive location="./lib/dom4j-1.6.1.jar" failOnError="false" />
      <archive location="./lib/pdfbox-app-1.8.4.jar" failOnError="false" />
      <archive location="./lib/poi-3.9-20121203.jar" failOnError="false" />
      <archive location="./lib/poi-examples-3.9-20121203.jar" failOnError="false" />
      <archive location="./lib/poi-excelant-3.9-20121203.jar" failOnError="false" />
      <archive location="./lib/poi-ooxml-3.9-20121203.jar" failOnError="false" />
      <archive location="./lib/poi-ooxml-schemas-3.9-20121203.jar" failOnError="false" />
      <archive location="./lib/poi-scratchpad-3.9-20121203.jar" failOnError="false" />
      <archive location="./lib/stax-api-1.0.1.jar" failOnError="false" />
      <archive location="./lib/swing-layout-1.0.4.jar" failOnError="false" />
      <archive location="./lib/xmlbeans-2.3.0.jar" failOnError="false" />
    </classPath>
    <nativeLibraryDirectories />
  </java>
  <includedFiles />
  <unextractableFiles />
</exe4j>

 

三.打安装包

用inno setup打安装包,这个比较简单,可以用向导配置

有中文版的,innosetup554H.zip

把jdk,lib目录,exe,jar,配置文件,一起打包。

jar要是找不到lib下的jar,可以配置jar包下的META-INF\MANIFEST.MF文件,指定Class-Path

或者把lib包下的jar包拷贝到jdk\lib\ext下,感觉这样不太好

 

向导说明:

第3个页面 应用程序文件夹
应用程序文件夹名称 安装后的主目录名称
第4个页面 应用程序文件
在添加文件夹后记得编辑一下,目标子文件夹,要不会少一级目录
第8个页面 编辑设置
自定义编译器输出文件夹 生成的安装包的存放位置,
不设置的话会保存在我的文档下的Output下,若先保存向导生成的文件,再编译,会生成在同iss文件同级目录的Output下

 

其他说明:

Inno Setup本身是32位的,似乎没有64位的,

他可以安装64位的程序

 

默认总是安装到C:\Program Files (x86) 32位目录下,

 

[Setup]

ArchitecturesInstallIn64BitMode=x64 ia64

 

加一句这个就好了,默认安装到C:\Program Files下了

 

这个是从样例里看的,

建议多看看样例 C:\Program Files (x86)\Inno Setup 5\Examples

 

我的样例:

; 脚本由 Inno Setup 脚本向导 生成!
; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!

#define MyAppName "测试项目"
#define MyAppVersion "1.0"
#define MyAppPublisher "公司名称"
#define MyAppURL "http://www.***.com/"
#define MyAppExeName "docProject.exe"

[Setup]
; 注: AppId的值为单独标识该应用程序。
; 不要为其他安装程序使用相同的AppId值。
; (生成新的GUID,点击 工具|在IDE中生成GUID。)
AppId={{331BF6AF-1281-4074-BCC3-2852DDD39A4D}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\docProject
DefaultGroupName={#MyAppName}
OutputBaseFilename=docProjectSetup
SetupIconFile=D:\zhao\Documents\NetBeansProjects\docProject\src\images\docProject.ico
Compression=lzma
SolidCompression=yes
ArchitecturesInstallIn64BitMode=x64 ia64

[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: "D:\zhao\Documents\NetBeansProjects\docProject\exe4j\docProject.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\zhao\Documents\NetBeansProjects\docProject\exe4j\docProject.jar"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\zhao\Documents\NetBeansProjects\docProject\exe4j\env.properties"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\zhao\Documents\NetBeansProjects\docProject\exe4j\jre7x64\*"; DestDir: "{app}\jre7x64"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\zhao\Documents\NetBeansProjects\docProject\exe4j\lib\*"; DestDir: "{app}\lib"; Flags: ignoreversion recursesubdirs createallsubdirs
; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

 

用wix打包成msi,没用到

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值