1<?xml version='1.0' encoding='UTF-8'?> 2<project name="Jar Jar Links" default="jar" xmlns:artifact="antlib:org.apache.maven.artifact.ant"> 3 <property file="${user.home}/build.properties" /> 4 <property file="build.properties" /> 5 6 <property name="javadoc.access" value="public"/> 7 8 <property name="compile.source" value="1.5"/> 9 <property name="compile.target" value="1.5"/> 10 <property name="compile.bootclasspath" value=""/> 11 <property name="compile.extdirs" value=""/> 12 13 <property name="compile.debug" value="true"/> 14 <property name="compile.deprecation" value="false"/> 15 <property name="compile.optimize" value="false"/> 16 17 <property name="src" location="src" /> 18 <property name="build" location="build" /> 19 <property name="dist" location="dist" /> 20 21 <!-- define Maven coordinates --> 22 <property name="groupId" value="com.googlecode.jarjar" /> 23 <property name="artifactId" value="jarjar" /> 24 <property name="version" value="1.4"/> 25 26 <!-- define artifacts' name, which follows the convention of Maven --> 27 <property name="maven-jar" value="${dist}/${artifactId}-${version}.jar" /> 28 <property name="maven-javadoc-jar" value="${dist}/${artifactId}-${version}-javadoc.jar" /> 29 <property name="maven-sources-jar" value="${dist}/${artifactId}-${version}-sources.jar" /> 30 31 <!-- defined maven snapshots and staging repository id and url --> 32 <property name="maven-snapshots-repository-id" value="sonatype-nexus-snapshots" /> 33 <property name="maven-snapshots-repository-url" value="https://oss.sonatype.org/content/repositories/snapshots/" /> 34 <property name="maven-staging-repository-id" value="sonatype-nexus-staging" /> 35 <property name="maven-staging-repository-url" value="https://oss.sonatype.org/service/local/staging/deploy/maven2/" /> 36 37 38 <property name="jarfile" value="dist/jarjar-${version}.jar"/> 39 <property name="jarfile.util" value="dist/jarjar-util-${version}.jar"/> 40 <property name="jarfile.mojo" value="dist/jarjar-plugin-${version}.jar"/> 41 42 <property name="test.jar" value="build/rejar.jar"/> 43 44 <target name="init"> 45 <echo>bootclasspath ${compile.bootclasspath}</echo> 46 <tstamp/> 47 <path id="path.build"> 48 <fileset dir="lib" includes="**/*.jar"/> 49 </path> 50 <path id="path.run"> 51 <path refid="path.build"/> 52 <pathelement path="build/main"/> 53 </path> 54 <path id="path.test"> 55 <path refid="path.run"/> 56 <pathelement path="build/test"/> 57 </path> 58 </target> 59 60 <macrodef name="compile"> 61 <attribute name="module"/> 62 <attribute name="refid"/> 63 <attribute name="bootclasspath" default=""/> 64 <sequential> 65 <mkdir dir="build/@{module}"/> 66 <copy todir="build/@{module}"> 67 <fileset dir="src/@{module}" excludes="**/*.java"/> 68 </copy> 69 <javac includeantruntime="true" srcdir="src/@{module}" destdir="build/@{module}" 70 source="${compile.source}" 71 target="${compile.target}" bootclasspath="@{bootclasspath}" extdirs="${compile.extdirs}" 72 debug="${compile.debug}" optimize="${compile.optimize}" deprecation="${compile.deprecation}"> 73 <classpath refid="@{refid}"/> 74 <compilerarg value="-Xlint"/> 75 </javac> 76 </sequential> 77 </macrodef> 78 79 <target name="compile" depends="init" description="Compile"> 80 <compile module="main" refid="path.build" bootclasspath="${compile.bootclasspath}"/> 81 <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpathref="path.run"/> 82 </target> 83 84 <target name="compile-test" depends="compile" description="Compile tests"> 85 <compile module="test" refid="path.run"/> 86 </target> 87 88 <target name="clean" description="Clean"> 89 <delete dir="build"/> 90 <delete dir="dist"/> 91 <delete dir="dist/javadoc"/> 92 </target> 93 94 <target name="jar" depends="compile" description="Create Jar"> 95 <mkdir dir="dist"/> 96 <jarjar jarfile="${jarfile}"> 97 <fileset dir="build/main"/> 98 <zipfileset src="lib/asm-4.0.jar"/> 99 <zipfileset src="lib/asm-commons-4.0.jar"> 100 <include name="org/objectweb/asm/commons/Remap*.class"/> 101 <include name="org/objectweb/asm/commons/LocalVariablesSorter.class"/> 102 </zipfileset> 103 <keep pattern="com.tonicsystems.jarjar.Main"/> 104 <keep pattern="com.tonicsystems.jarjar.JarJarTask"/> 105 <rule pattern="com.tonicsystems.jarjar.util.**" result="com.tonicsystems.jarjar.ext_util.@1"/> 106 <rule pattern="org.objectweb.asm.**" result="com.tonicsystems.jarjar.asm.@1"/> 107 <manifest> 108 <attribute name="Main-Class" value="com.tonicsystems.jarjar.Main"/> 109 <attribute name="Implementation-Version" value="${version}"/> 110 </manifest> 111 </jarjar> 112 </target> 113 114 <target name="jar-util" depends="compile" description="Create utility Jar"> 115 <mkdir dir="dist"/> 116 <jar jarfile="${jarfile.util}"> 117 <fileset dir="build/main" includes="com/tonicsystems/jarjar/util/**"/> 118 </jar> 119 </target> 120 121 <target name="dist" depends="jar,dist-src,javadoc" description="generate the distribution"> 122 <copy file="${dist}/jarjar-src-${version}.zip" tofile="${maven-sources-jar}" /> 123 <jar jarfile="${maven-javadoc-jar}"> 124 <fileset dir="${dist}/javadoc" /> 125 </jar> 126 </target> 127 128 <!-- before this, update project version (both build.xml and pom.xml) from SNAPSHOT to RELEASE --> 129 <target name="stage" depends="dist" description="deploy release version to Maven staging repository"> 130 <!-- sign and deploy the main artifact --> 131 <artifact:mvn> 132 <arg value="org.apache.maven.plugins:maven-gpg-plugin:1.3:sign-and-deploy-file" /> 133 <arg value="-Durl=${maven-staging-repository-url}" /> 134 <arg value="-DrepositoryId=${maven-staging-repository-id}" /> 135 <arg value="-DpomFile=pom.xml" /> 136 <arg value="-Dfile=${maven-jar}" /> 137 <arg value="-Pgpg" /> 138 </artifact:mvn> 139 140 <!-- sign and deploy the sources artifact --> 141 <artifact:mvn> 142 <arg value="org.apache.maven.plugins:maven-gpg-plugin:1.3:sign-and-deploy-file" /> 143 <arg value="-Durl=${maven-staging-repository-url}" /> 144 <arg value="-DrepositoryId=${maven-staging-repository-id}" /> 145 <arg value="-DpomFile=pom.xml" /> 146 <arg value="-Dfile=${maven-sources-jar}" /> 147 <arg value="-Dclassifier=sources" /> 148 <arg value="-Pgpg" /> 149 </artifact:mvn> 150 151 <!-- sign and deploy the javadoc artifact --> 152 <artifact:mvn> 153 <arg value="org.apache.maven.plugins:maven-gpg-plugin:1.3:sign-and-deploy-file" /> 154 <arg value="-Durl=${maven-staging-repository-url}" /> 155 <arg value="-DrepositoryId=${maven-staging-repository-id}" /> 156 <arg value="-DpomFile=pom.xml" /> 157 <arg value="-Dfile=${maven-javadoc-jar}" /> 158 <arg value="-Dclassifier=javadoc" /> 159 <arg value="-Pgpg" /> 160 </artifact:mvn> 161 </target> 162 163 <target name="dist-src" depends="compile" description="Create source distribution"> 164 <mkdir dir="${dist}"/> 165 <zip destfile="${dist}/jarjar-src-${version}.zip"> 166 <zipfileset dir="src" excludes="**/*.save" prefix="jarjar-${version}/src"/> 167 <zipfileset dir="lib" prefix="jarjar-${version}/lib"/> 168 <zipfileset dir="maven" prefix="jarjar-${version}/maven"/> 169 <zipfileset dir="." includes="build.xml,COPYING" prefix="jarjar-${version}"/> 170 </zip> 171 </target> 172 173 <target name="mojo" depends="jar" description="Create Maven plugin"> 174 <mkdir dir="dist"/> 175 <copy todir="dist/maven"> 176 <fileset dir="maven"/> 177 <filterset> 178 <filter token="VERSION" value="${version}"/> 179 </filterset> 180 </copy> 181 <jar jarfile="${jarfile.mojo}"> 182 <zipfileset src="${jarfile}"/> 183 <zipfileset dir="dist/maven" prefix="META-INF/maven" includes="plugin.xml"/> 184 <zipfileset 185 dir="dist/maven" 186 prefix="META-INF/maven/com.tonicsystems.jarjar/jarjar-plugin" 187 includes="pom.xml,pom.properties"/> 188 </jar> 189 </target> 190 191 <target name="test" depends="junit,test-rejar,test-manifest,test-enum" description="Run tests"/> 192 193 <target name="junit" depends="compile-test"> 194 <junit haltonfailure="on"> 195 <!-- <jvmarg value="-Xint"/> --> 196 <!-- <jvmarg value="-Xprof"/> --> 197 <!-- <jvmarg value="-server"/> --> 198 <formatter type="plain" usefile="false"/> 199 <classpath refid="path.test"/> 200 <batchtest> 201 <fileset dir="src/test" includes="**/*Test.java"/> 202 </batchtest> 203 </junit> 204 </target> 205 206 <target name="test-rejar" depends="jar"> 207 <taskdef name="jarjar2" classname="com.tonicsystems.jarjar.JarJarTask" classpath="${jarfile}"/> 208 <delete file="${test.jar}"/> 209 <jarjar2 jarfile="${test.jar}"> 210 <fileset dir="build/main"/> 211 <zipfileset src="lib/asm-4.0.jar"/> 212 <zipfileset src="lib/asm-commons-4.0.jar"/> 213 <rule pattern="org.objectweb.asm.**" result="com.tonicsystems.jarjar.asm.@1"/> 214 </jarjar2> 215 <delete file="${test.jar}"/> 216 </target> 217 218 <target name="test-enum" depends="compile"> 219 <delete file="build/enumtest.jar"/> 220 <jarjar jarfile="build/enumtest.jar" verbose="true"> 221 <zipfileset src="src/test/enumtest.jar"/> 222 <rule pattern="foo.**" result="bar.@1"/> 223 </jarjar> 224 <java classpath="build/enumtest.jar" classname="bar.EnumTest"/> 225 <!-- TODO: check output --> 226 <!-- <delete file="build/enumtest.jar"/> --> 227 </target> 228 229 <target name="test-manifest" depends="compile"> 230 <delete> 231 <fileset dir="build" includes="manifest*.jar"/> 232 </delete> 233 <jar jarfile="build/manifest1.jar"> 234 <manifest> 235 <attribute name="Built-By" value="Chris"/> 236 <attribute name="Specification-Title" value="Example"/> 237 </manifest> 238 </jar> 239 <jar jarfile="build/manifest2.jar"> 240 <manifest> 241 <attribute name="Built-By" value="CJN"/> 242 <attribute name="Implementation-Title" value="common"/> 243 </manifest> 244 </jar> 245 <jar jarfile="build/manifest3.jar" filesetmanifest="merge"> 246 <zipfileset src="build/manifest1.jar"/> 247 <zipfileset src="build/manifest2.jar"/> 248 </jar> 249 <jarjar jarfile="build/manifest4.jar" filesetmanifest="merge"> 250 <zipfileset src="build/manifest1.jar"/> 251 <zipfileset src="build/manifest2.jar"/> 252 </jarjar> 253 <!-- TODO: check manifest contents here --> 254 </target> 255 256 <!-- TODO: reference ant javadocs --> 257 <target name="javadoc" depends="compile" description="Generate the javadoc"> 258 <mkdir dir="dist/javadoc"/> 259 <javadoc 260 sourcepath="${src}/main" 261 destdir="${dist}/javadoc" 262 access="${javadoc.access}" 263 failonerror="true" 264 packagenames="com.tonicsystems.jarjar.*" 265 classpathref="path.run" 266 Author="true" 267 Version="true" 268 Use="true" 269 /> 270 </target> 271</project> 272