HardBirch

Ant编译打包签名

时间:12-07-04 栏目:iOS移动应用开发技术 作者:张飞不张,文采横飞 评论:2 点击: 1,840 次

整理磁盘发现很久之前写的Ant编译、打包及签名jar脚本,共享出来仅供参考吧(应该还有可完善之处)。

共有2个xml文件:build.xml及build-common.xml,前者调用了后者。

build.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project name="isoftRdpClient-2.0" default="standalone" basedir=".">
	<property name="jar.name" value="properJavaRDP"/>
	<property name="dist.dir" value="${basedir}/dist"/>
	<property name="build.dir" value="${basedir}/build"/>
	<property name="bin.dir" value="${basedir}/bin"/>
	<property name="src.dir" value="${basedir}/src"/>
	<property name="rpm.dir" value="${basedir}/rpm"/>
	<property name="build.extension" value="${basedir}/extension"/>

	<property name="java.log4j11.package" value="${basedir}/log4j-java1.1"/>
	<property name="java.getopt.package" value="${basedir}/gnu-getopt-1.0.11-java/lib"/>
	<property name="java.quartz.package" value="${basedir}/quartz-1.8.0"/>
	<property name="java.printer.package" value="${basedir}/printer"/>

	<property name="log4j.java11" value="log4j-java1.1"/>
	<property name="jar.log4j.java11" value="log4j-java1.1.jar"/>
	<property name="jar.gnugetopt" value="java-getopt-1.0.11.jar"/>
	<property name="jar.quartz" value="quartz-1.8.0.jar"/>
	<property name="jar.jta" value="jta-1.1.jar"/>
	<property name="jar.dbcp" value="commons-dbcp-1.3.jar"/>
	<property name="jar.pool" value="commons-pool-1.5.4.jar"/>
	<property name="jar.log4j12" value="log4j-1.2.14.jar"/>
	<property name="jar.slf4j" value="slf4j-api-1.5.10.jar"/>
	<property name="jar.slf4jlog" value="slf4j-log4j12-1.5.10.jar"/>
	<property name="jar.printer" value="os_jpedal.jar"></property>

	<property name="commonxml" value="${basedir}/build-common.xml"/>
	<property name="runclass" value="com.elusiva.rdp.RdesktopSwing"/>

	<!-- jar包数字签名相关属性开始-->
	<property name="jarName" value="JavaRDP16-1.1.jar" />
	<property name="keystorePath" value="${build.dir}/keystore" />
	<!-- 数字签名用的密钥信息参数 -->
	<property name="keystoreName" value="isoftkeystore.store" />
	<property name="storepass" value="isoft123" />
	<property name="keystore" location="${keystorePath}/${keystoreName}" />
	<property name="keypass" value="isoft123" />
	<property name="keysize" value="1024" />
	<property name="alias" value="isoft" />
	<property name="validity" value="365" />
	<!-- jar包数字签名相关属性结束-->

	<!-- Load additional and personalised properties -->
	<property file="${basedir}/project.properties"/>

	<target name="init">
		<ant antfile="${commonxml}" target="init-common"/>
	</target>

	<target name="build" depends="init">
		<ant antfile="${commonxml}" target="build-common"/>
		<property file="${build.dir}/product.version"/>
	</target>

	<target name="jar" depends="build">
		<property name="jar.path" value="${jar.name}-${product.version}.jar" />
		<property name="jar.path.16" value="${jar.name}16-${product.version}.jar" />
		<mkdir dir="${dist.dir}" />
		<ant antfile="${commonxml}" target="jar-common"/>
	</target>
	<target name="dist" depends="jar">
		<jar jarfile="${dist.dir}/${jar.log4j.java11}"
		      defaultexcludes="no"
		      excludes="META-INF/*">
			<zipfileset src="${java.log4j11.package}/${jar.log4j.java11}" excludes="META-INF/*"/>
		</jar>

		<jar jarfile="${dist.dir}/${jar.gnugetopt}"
		      defaultexcludes="no"
		      excludes="META-INF/*">
			<zipfileset src="${java.getopt.package}/${jar.gnugetopt}" excludes="META-INF/*"/>
		</jar>

		<jar jarfile="${dist.dir}/${jar.quartz}"
	  			      defaultexcludes="no"
	  			      excludes="META-INF/*">
			<zipfileset src="${java.quartz.package}/${jar.quartz}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.quartz.package}/${jar.jta}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.quartz.package}/${jar.log4j12}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.quartz.package}/${jar.dbcp}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.quartz.package}/${jar.pool}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.quartz.package}/${jar.slf4j}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.quartz.package}/${jar.slf4jlog}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.printer.package}/${jar.printer}" excludes="META-INF/*,*.java"/>
		</jar>
	</target>

	<target name="release" description="Create the extension archive" depends="standalone">
		<copy file="${dist.dir}/JavaRDP16-${product.version}.jar" tofile="${build.extension}/JavaRDP16-${product.version}.jar"/>
		<copy file="${basedir}/extension.xml" tofile="${build.extension}/extension.xml"/>
		<echo>Creating the archive</echo>
		<zip destfile="${dist.dir}/application-seamlessjavardp.zip">
			<zipfileset dir="${build.extension}" prefix="application-seamlessjavardp" includes="**/*"/>
		</zip>
		<echo>Generating checksums</echo>
		<checksum>
			<fileset dir="${dist.dir}" includes="*.zip"/>
		</checksum>
	</target>

	<target name="standalone" depends="init">
		<uptodate targetfile="${ant.file}" property="build.changed">
			<srcfiles dir="${src.dir}" includes="**/*.java"/>
			<srcfiles dir="${src.dir}1.5" includes="**/*.java"/>
			<srcfiles dir="${src.dir}1.6" includes="**/*.java"/>
		</uptodate>

		<ant antfile="${commonxml}" target="build-common-version">
			<property name="java.version" value="1.5"/>
			<property name="java.version" value="1.6"/>
		</ant>

		<ant antfile="${commonxml}" target="generate-product-version"/>
		<property file="${build.dir}/product.version"/>

		<jar destfile="${dist.dir}/JavaRDP16-${product.version}.jar" index="yes">
			<manifest>
				<attribute name="Built-By" value="${user.name}"/>
				<attribute name="Main-Class" value="${runclass}"/>
			</manifest>
			<fileset dir="${build.dir}" includes="**/*.class, **/*.properties"/>
			<fileset dir="${build.dir}1.6" includes="**/*.class, **/*.PNG"/>
			<fileset dir="${basedir}/" includes="keymaps/*"/>
			<!--
      <zipfileset src="${java.log4j11.package}/${jar.log4j.java11}" excludes="META-INF/*"/>
      -->
			<zipfileset src="${java.getopt.package}/${jar.gnugetopt}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.quartz.package}/${jar.quartz}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.quartz.package}/${jar.jta}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.quartz.package}/${jar.log4j12}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.quartz.package}/${jar.dbcp}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.quartz.package}/${jar.pool}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.quartz.package}/${jar.slf4j}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.quartz.package}/${jar.slf4jlog}" excludes="META-INF/*,*.java"/>
			<zipfileset src="${java.printer.package}/${jar.printer}" excludes="META-INF/*,*.java"/>
		</jar>
	</target>

	<target name="run" depends="build">
		<java classname="${runclass}">
			<arg value="m6.propero.int"/>
			<classpath>
				<!-- include common class files, java 1.6 class files and log4j jar  -->
				<pathelement path="${build.dir}"/>
				<pathelement path="${build.dir}1.6"/>
				<pathelement location="${jar.log4j.java11}" />
			</classpath>
		</java>
	</target>

	<target name="clean">
		<ant antfile="${commonxml}" target="clean-common"/>
		<delete dir="${rpm.dir}" />
	</target>

	<!-- 数字签名相关target -->
	<!-- 创建证书 -->
	<target name="genericKey">
		<echo message="genkey..." />
		<delete>
			<fileset dir="${keystorePath}">
				<include name="${keystoreName}" />
			</fileset>
		</delete>

		<genkey keystore="${keystore}" storepass="${storepass}" alias="${alias}" keypass="${keypass}"
						keysize="${keysize}" validity="${validity}"
						dname="CN=isoft i-VAPP, OU=Jakarta Division, O=Apache.org, C=ZH">
		</genkey>
		<echo message="genkey... done" />
	</target>

	<!-- 对JAR进行数字签名 -->
	<target name="signJar" depends="genericKey,standalone">
		<echo message="jarsigner..." />
		<echo message="${keystore}"/>
		<signjar keystore="${keystore}" storepass="${storepass}" jar="${jarName}" alias="${alias}">
			<fileset dir="${dist.dir}">
				<include name="${jarName}" />
			</fileset>
		</signjar>
		<echo message="jarsigner... done." />
	</target>
</project>

build-common.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project name="build-comm" default="init-common" basedir=".">
	<property file="${basedir}/project.properties"/>

	<!-- CLASSPATH required for build. -->
	<path id="build.classpath">
		<fileset dir="${java.log4j11.package}" includes="${jar.log4j.java11}"/>
		<fileset dir="${java.getopt.package}" includes="${jar.gnugetopt}"/>
		<fileset dir="${java.quartz.package}" includes="${jar.quartz}"/>
		<fileset dir="${java.printer.package}" includes="${jar.printer}">
		</fileset>
	</path>

	<target name="init-common">
		<mkdir dir="${build.dir}"/>
		<mkdir dir="${build.dir}1.6"/>
		<mkdir dir="${dist.dir}" />
		<mkdir dir="${keystorePath}"/>
		<mkdir dir="${build.dir}/keymaps"/>
		<mkdir dir="${bin.dir}"/>

		<copy todir="${build.dir}/keymaps">
			<fileset dir="${basedir}/keymaps" />
		</copy>
	</target>

	<target name="generate-product-version" depends="init-common">
		<javac srcdir="${src.dir}"
           includes="**/Version.java"
           destdir="${build.dir}"/>
		<java classpath="${build.dir}"
          classname="com.elusiva.rdp.Version">
			<arg value="${build.dir}/product.version"/>
		</java>
	</target>

	<target name="build-common-version">

		<javac srcdir="${src.dir}:${src.dir}${java.version}" destdir="${build.dir}" classpathref="build.classpath" rel="external nofollow"  rel="external nofollow"  fork="true" target="${java.version}">
		</javac>

		<javac srcdir="${src.dir}:${src.dir}${java.version}" destdir="${bin.dir}" classpathref="build.classpath" rel="external nofollow"  rel="external nofollow"  fork="true" target="${java.version}">
		</javac>

		<mkdir dir="${build.dir}${java.version}/com/elusiva/rdp" />
		<move todir="${build.dir}${java.version}/com/elusiva/rdp">
			<fileset dir="${build.dir}/com/elusiva/rdp" includes="*_Localised.class"/>
		</move>
		<copy todir="${build.dir}/com/elusiva/rdp">
			<fileset dir="" includes="*.png,*.PNG " />
		</copy>
	</target>

	<target name="build-common">
		<!-- Build each version of the code in turn.
         Note this will be replaced by an antCall element when we can
         be assured everyone will have Ant 1.5.2
      -->
		<ant antfile="${commonxml}" target="build-common-version">
			<property name="java.version" value="1.6"/>
		</ant>

		<ant antfile="${commonxml}" target="generate-product-version"/>
		<property file="${build.dir}/product.version"/>

	</target>

	<target name="jar-common">
		<copy toDir="${build.dir}/keymaps"
          filtering="true">
			<fileset dir="${basedir}/keymaps"/>
		</copy>
		<jar jarfile="${dist.dir}/${jar.path}" basedir="${build.dir}/"/>
		<jar jarfile="${dist.dir}/${jar.path.16}" basedir="${build.dir}1.6/"/>
	</target>

	<target name="clean-common">
		<delete dir="${build.dir}" />
		<delete dir="${build.dir}1.6" />
		<delete dir="${build.dir}1.4" />
		<delete dir="${build.dir}1.3" />
		<delete dir="${build.dir}1.2" />
		<delete dir="${build.dir}1.1" />
		<delete dir="${dist.dir}" />
		<delete dir="${bin.dir}"/>
	</target>
</project>

声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: Ant编译打包签名

Ant编译打包签名:目前有2 条留言

  1. 板凳
    njm21:

    请问,这两个xml是怎么调用的吗???

    2012-11-10 10:39 [回复]
  2. 沙发
    M_ChangGong:

    [reply]njm21[/reply]
    eclipse中用ant

    2012-11-11 21:38 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐