Created
September 10, 2012 09:53
-
-
Save cpeisert/3690026 to your computer and use it in GitHub Desktop.
plovr Ant build file using ClassFileSet to include transitive deps of org.plovr package in jar file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project name="plovr" basedir="." default="build"> | |
<property file="${basedir}/build.properties" /> | |
<property file="${basedir}/default.build.properties" /> | |
<property name="src.dir" value="${basedir}/src" /> | |
<property name="test.dir" value="${basedir}/test" /> | |
<property name="testdata.dir" value="${basedir}/testdata" /> | |
<property name="www.dir" value="${basedir}/www" /> | |
<property name="demo.dir" value="${www.dir}/demo" /> | |
<property name="lib.dir" value="${basedir}/lib" /> | |
<property name="scripts.dir" value="${basedir}/scripts" /> | |
<property name="build.dir" value="${basedir}/build" /> | |
<property name="classes.dir" value="${build.dir}/classes" /> | |
<property name="build.dir.www" value="${build.dir}/www" /> | |
<property name="build.dir.www.jsdoc" value="${build.dir.www}/jsdoc" /> | |
<property name="javadoc.dir" value="${build.dir.www}/javadoc" /> | |
<property name="closure.dir" value="${basedir}/closure" /> | |
<property name="closure-compiler.dir" value="${closure.dir}/closure-compiler" /> | |
<property name="closure-library.dir" value="${closure.dir}/closure-library" /> | |
<property name="closure-templates.dir" value="${closure.dir}/closure-templates" /> | |
<available file="${build.dir}/plovr.jar" | |
type="file" | |
property="jar.present" | |
/> | |
<path id="plovr.classpath"> | |
<!-- All jars listed here must also be included in plovr.jar --> | |
<fileset dir="${lib.dir}" includes="*.jar" /> | |
<fileset dir="${closure-compiler.dir}/lib" | |
includes="args4j.jar, | |
json.jar, | |
jsr305.jar, | |
protobuf-java.jar" | |
/> | |
<fileset dir="${closure-compiler.dir}/build/lib" | |
includes="rhino.jar" | |
/> | |
<fileset dir="${closure-templates.dir}/java/lib" | |
includes="aopalliance.jar, | |
guice-3.0.jar, | |
guice-assistedinject-3.0.jar, | |
guice-multibindings-3.0.jar, | |
icu4j-4_8_1_1.jar, | |
javax.inject.jar" | |
/> | |
<pathelement location="${classes.dir}" /> | |
<!-- Include src.dir to include resources, such as modules.soy --> | |
<pathelement location="${src.dir}" /> | |
</path> | |
<target name="clean" description="remove all generated files"> | |
<delete dir="${build.dir}" /> | |
<!-- Clean Closure Templates genfiles. --> | |
<ant dir="${closure-templates.dir}" target="clean" inheritAll="false" /> | |
<!-- No need to clean ${closure-templates.dir}/build or | |
${closure-compiler.dir}/build because plovr's "compile" target does | |
not use those directories. It compiles Closure Templates and Closure | |
Compiler Java files into its own build/classes directory. | |
--> | |
</target> | |
<target name="compile" description="compile Java source code"> | |
<!-- Build intermediate Closure Templates target for its genfiles. --> | |
<ant dir="${closure-templates.dir}" target="compile" inheritAll="false" /> | |
<ant dir="${closure-compiler.dir}" target="rhino-jarjar" inheritAll="false" /> | |
<mkdir dir="${classes.dir}" /> | |
<javac destdir="${classes.dir}" | |
classpathref="plovr.classpath" | |
debug="on" | |
deprecation="on" | |
fork="true" | |
> | |
<compilerarg value="-Werror"/> | |
<src path="${src.dir}" /> | |
<src path="${test.dir}" /> | |
<src path="${closure-compiler.dir}/src" /> | |
<src path="${closure-compiler.dir}/gen" /> | |
<src path="${closure-templates.dir}/java/src" /> | |
<src path="${closure-templates.dir}/build/genfiles" /> | |
</javac> | |
<!-- Move Messages.properties where ScriptRuntime.java expects it. --> | |
<mkdir dir="${classes.dir}/rhino_ast/java/com/google/javascript/rhino/" /> | |
<copy file="${closure-compiler.dir}/src/com/google/javascript/rhino/Messages.properties" | |
todir="${classes.dir}/rhino_ast/java/com/google/javascript/rhino/" /> | |
<!-- Move ParserConfig.properties where ParserRunner.java expects it. --> | |
<copy file="${closure-compiler.dir}/src/com/google/javascript/jscomp/parsing/ParserConfig.properties" | |
todir="${classes.dir}/com/google/javascript/jscomp/parsing" /> | |
<!-- Include these files to support the "info" command. --> | |
<mkdir dir="${classes.dir}/revisions"/> | |
<copy todir="${basedir}/build/classes/revisions/"> | |
<fileset dir="${basedir}/tools/imports/" includes="rev-*" /> | |
</copy> | |
<exec executable="bash"> | |
<arg value="${basedir}/insert-plovr-revision.sh" /> | |
</exec> | |
</target> | |
<target name="test" | |
depends="jar" | |
description="run the unit tests"> | |
<junit failureproperty="hasFailingTests" | |
showoutput="true"> | |
<formatter type="plain" usefile="false" /> | |
<batchtest fork="yes"> | |
<fileset dir="${test.dir}"> | |
<include name="**/*Test.java" /> | |
</fileset> | |
</batchtest> | |
<classpath refid="plovr.classpath"></classpath> | |
</junit> | |
<fail if="hasFailingTests" /> | |
<ant dir="${testdata.dir}" target="build" /> | |
</target> | |
<target name="externs"> | |
<mkdir dir="${classes.dir}" /> | |
<exec executable="bash" | |
output="${classes.dir}/externs_manifest.txt" | |
failonerror="true"> | |
<arg value="${basedir}/listfiles.sh" /> | |
<arg value="${closure-compiler.dir}/externs" /> | |
</exec> | |
<mkdir dir="${classes.dir}/contrib" /> | |
<exec executable="bash" | |
output="${classes.dir}/contrib_externs.txt" | |
failonerror="true"> | |
<arg value="${basedir}/tools/externs/listcontrib.sh" /> | |
<arg value="${closure-compiler.dir}/contrib/externs" /> | |
<arg value="${classes.dir}/contrib" /> | |
</exec> | |
</target> | |
<target name="library"> | |
<mkdir dir="${classes.dir}" /> | |
<exec executable="bash" | |
output="${classes.dir}/library_manifest.txt" | |
failonerror="true"> | |
<arg value="${basedir}/listfiles.sh" /> | |
<arg value="${closure-library.dir}/closure/goog" /> | |
</exec> | |
</target> | |
<target name="third_party"> | |
<mkdir dir="${classes.dir}" /> | |
<exec executable="bash" | |
output="${classes.dir}/third_party_manifest.txt" | |
failonerror="true"> | |
<arg value="${basedir}/listfiles.sh" /> | |
<arg value="${closure-library.dir}/third_party/closure/goog" /> | |
</exec> | |
</target> | |
<target name="jar" | |
depends="compile, externs, library, third_party" | |
description="build plovr.jar"> | |
<!-- Copy Jakarta-BCEL library to the user's home directory under .ant/lib | |
to enable the use the Ant type ClassFileSet. --> | |
<fileset id="bcel.jar.id" dir="${basedir}" includes="lib/bcel*.jar" /> | |
<property name="bcel.jar" refid="bcel.jar.id" /> | |
<available file="${user.home}/.ant/${bcel.jar}" | |
property="bcel.lib.present" /> | |
<copy file="${bcel.jar}" todir="${user.home}/.ant/lib" /> | |
<fail unless="${bcel.lib.present}" | |
message="The Jakarta-BCEL library (which is required to create the | |
plovr jar file) was just copied to your home directory under .ant/lib. Try | |
executing the jar target again now that the BCEL library is included in the Ant | |
runtime classpath." /> | |
<mkdir dir="${build.dir}" /> | |
<!-- Unzip jar file dependencies so that the ClassFileSet can select only | |
the transitive dependencies of the package org.plovr. --> | |
<unjar dest="${classes.dir}" failonemptyarchive="true"> | |
<fileset dir="${lib.dir}" includes="*.jar" /> | |
<fileset dir="${closure-compiler.dir}/lib" | |
includes="args4j.jar, | |
json.jar, | |
jsr305.jar, | |
protobuf-java.jar" /> | |
<fileset dir="${closure-templates.dir}/java/lib" | |
includes="aopalliance.jar, | |
guice-3.0.jar, | |
guice-assistedinject-3.0.jar, | |
guice-multibindings-3.0.jar, | |
icu4j-core.jar, | |
javax.inject.jar" /> | |
</unjar> | |
<!-- Get the transitive dependencies of org.plovr package. --> | |
<classfileset id="plovr-deps" dir="${classes.dir}"> | |
<rootfileset dir="${classes.dir}" includes="org/plovr/**/*.class" /> | |
<!-- Include Guice classes, which do not show up as dependencies due to | |
dependency injection. --> | |
<rootfileset dir="${classes.dir}" | |
includes="com/google/inject/**/*.class" /> | |
</classfileset> | |
<jar destfile="${build.dir}/plovr.jar"> | |
<!-- Include transitive dependencies of org.plovr package. --> | |
<fileset refid="plovr-deps" /> | |
<!-- Copy resources needed for org.plovr package. --> | |
<fileset dir="${src.dir}"> | |
<include name="org/plovr/**/*.js" /> | |
<include name="org/plovr/**/*.soy" /> | |
</fileset> | |
<!-- Copy resources needed for org.plovr.docgen package. --> | |
<fileset dir="${src.dir}"> | |
<include name="org/plovr/docgen/*.soy" /> | |
<include name="org/plovr/docgen/*.css" /> | |
</fileset> | |
<!-- Copy license file, notice, manifests, rhino Messages.properties, | |
ParserConfig.properties, contrib externs files, and revision info to | |
support for the "info" command. --> | |
<fileset dir="${classes.dir}"> | |
<include name="LICENSE" /> | |
<include name="NOTICE" /> | |
<include name="*.txt" /> | |
<include name="rhino_ast/java/com/google/javascript/rhino/Messages.properties"/> | |
<include name="com/google/javascript/jscomp/parsing/ParserConfig.properties"/> | |
<include name="contrib/**/*.js" /> | |
<include name="revisions/rev-*" /> | |
</fileset> | |
<zipfileset dir="${closure-compiler.dir}/externs/" | |
includes="**/*.js" | |
prefix="externs" | |
/> | |
<zipfileset dir="${closure-library.dir}/closure/goog/" | |
includes="**/*.js" | |
excludes="deps.js" | |
prefix="closure/goog" | |
/> | |
<zipfileset dir="${closure-library.dir}/third_party/closure/goog/" | |
includes="**/*.js" | |
excludes="deps.js" | |
prefix="third_party/closure/goog" | |
/> | |
<zipfileset dir="${closure-templates.dir}/javascript/" | |
includes="soyutils_usegoog.js, soyutils.js" | |
prefix="soy" /> | |
<zipgroupfileset dir="${closure-compiler.dir}/build/lib" | |
includes="rhino.jar" /> | |
<manifest> | |
<attribute name="Main-Class" value="org.plovr.cli.Main" /> | |
</manifest> | |
</jar> | |
</target> | |
<target name="integration-test" | |
depends="jar" | |
description="build the jar and run it on localhost:9818"> | |
<echo>Visit http://localhost:9818/compile?id=integration-test</echo> | |
<java jar="${build.dir}/plovr.jar" fork="true"> | |
<arg value="serve" /> | |
<arg line="--port 9818" /> | |
<arg value="${testdata.dir}/example/integration-test-config.js" /> | |
<arg value="${testdata.dir}/modules/plovr-config.js" /> | |
<jvmarg value="-Xdebug" /> | |
<jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"/> | |
</java> | |
</target> | |
<target name="test-soyweb-server" | |
description="run the soyweb server in debug mode on localhost:9811"> | |
<echo>Visit http://localhost:9811/hello</echo> | |
<java jar="${build.dir}/plovr.jar" fork="true"> | |
<jvmarg value="-Xdebug" /> | |
<jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"/> | |
<arg value="soyweb" /> | |
<arg line="--dir ${testdata.dir}/soy-server" /> | |
</java> | |
</target> | |
<target name="generate-options-documentation" | |
description="generate the documentation for ConfigOption.java" | |
depends="compile"> | |
<mkdir dir="${build.dir.www}" /> | |
<java fork="true" | |
classname="org.plovr.ConfigOptionDocumentationGenerator" | |
output="${build.dir.www}/options.html" | |
failonerror="true" | |
logerror="true" | |
> | |
<classpath refid="plovr.classpath"></classpath> | |
</java> | |
</target> | |
<target name="develop-documentation" | |
description="run the soyweb server in debug mode to develop docs"> | |
<echo>Visit http://localhost:9811/</echo> | |
<java jar="${build.dir}/plovr.jar" fork="true"> | |
<jvmarg value="-Xdebug" /> | |
<jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"/> | |
<arg value="soyweb" /> | |
<arg line="--template base" /> | |
<arg line="--dir ${www.dir}" /> | |
<arg line="--globals ${basedir}/www-globals.js" /> | |
</java> | |
</target> | |
<target name="javadoc" | |
description="generate HTML Javadoc for the org.plovr Java code" | |
> | |
<mkdir dir="${javadoc.dir}" /> | |
<javadoc sourcepath="${src.dir}" | |
destdir="${javadoc.dir}" | |
protected="true" | |
windowtitle="plovr" | |
classpathref="plovr.classpath" | |
> | |
<link href="http://download.oracle.com/javase/6/docs/api/" /> | |
<link href="http://docs.guava-libraries.googlecode.com/git/javadoc/" /> | |
<link href="http://google-gson.googlecode.com/svn/tags/gson-1.7.1/docs/javadocs/" /> | |
<link href="http://closure-compiler.googlecode.com/svn/trunk/javadoc/" /> | |
<link href="http://closure-templates.googlecode.com/svn/trunk/javadoc-complete/" /> | |
</javadoc> | |
</target> | |
<!-- | |
This runs plovr such that classfiles from build/classes are loaded before | |
those in plovr.jar. This way, when developing the documentation generation | |
logic, there is no need to rebuild plovr.jar as part of the build step. | |
plovr.jar is included in the classpath only to include resources and | |
classfiles from jars in the lib directory. | |
--> | |
<target name="generate-closure-library-jsdoc" | |
description="Generates HTML documentation for Closure Library"> | |
<exec executable="bash" failonerror="true"> | |
<arg value="${scripts.dir}/generate-closure-library-jsdoc.sh" /> | |
</exec> | |
</target> | |
<target name="serve-prod-documentation" | |
description="run the soyweb server on plovr.com to serve the docs" | |
depends="generate-options-documentation, javadoc"> | |
<fail unless="jar.present"> | |
The plovr jar has not been built. Run "ant jar" to build it. | |
</fail> | |
<mkdir dir="${build.dir.www}" /> | |
<copy todir="${build.dir.www}"> | |
<fileset dir="${www.dir}" includes="**/*" /> | |
</copy> | |
<java jar="${build.dir}/plovr.jar" | |
fork="true" | |
maxmemory="128m"> | |
<arg value="soyweb" /> | |
<arg line="--template base" /> | |
<arg line="--dir ${build.dir.www}" /> | |
<arg line="--static" /> | |
<arg line="--globals ${basedir}/prod-globals.js" /> | |
</java> | |
</target> | |
<target name="run-demo" description="run the demo"> | |
<fail unless="jar.present"> | |
The plovr jar has not been built. Run "ant jar" to build it. | |
</fail> | |
<java jar="${build.dir}/plovr.jar" | |
dir="${demo.dir}" | |
fork="true" | |
maxmemory="128m"> | |
<arg value="serve" /> | |
<arg value="${demo.dir}/demo-config.js" /> | |
<arg value="${testdata.dir}/modules/plovr-config.js" /> | |
</java> | |
</target> | |
<target name="build" depends="jar" /> | |
<target name="all" | |
description="build all deliverables for the plovr project" | |
depends="clean, | |
jar, | |
test, | |
generate-options-documentation, | |
generate-closure-library-jsdoc, | |
javadoc" | |
/> | |
</project> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment