Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>tags/V1_9_21_2
<!-- -*- Mode: SGML; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- --> | |||||
<!-- ========================================================================= --> | |||||
<!-- Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC). --> | |||||
<!-- Copyright (c) 2003, 2005 Contributors. --> | |||||
<!-- All rights reserved. --> | |||||
<!-- This program and the accompanying materials are made available --> | |||||
<!-- under the terms of the Eclipse Public License v 2.0 --> | |||||
<!-- which accompanies this distribution and is available at --> | |||||
<!-- https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt --> | |||||
<!-- --> | |||||
<!-- Contributors: --> | |||||
<!-- Xerox/PARC initial implementation --> | |||||
<!-- A Colyer / G Harley eclipse plugin dirs --> | |||||
<!-- ========================================================================= --> | |||||
<!-- include as common entity for module build scripts --> | |||||
<!-- should only need to edit version properties --> | |||||
<project name="build-properties" default="init-properties"> | |||||
<target name="init-properties" | |||||
unless="init-properties.done"> | |||||
<!-- callers should define aspectj.modules.dir --> | |||||
<property name="aspectj.modules.dir" location="${basedir}/.."/> | |||||
<require-available property="local-properties" | |||||
path="${aspectj.modules.dir}/build/local.properties"/> | |||||
<property file="${aspectj.modules.dir}/build/local.properties"/> | |||||
<!-- | |||||
Changing version: | |||||
- base should always be 1.1 (used for manifests, other version-parsing code) | |||||
- Others should be DEVELOPMENT unless testing/doing release builds, when | |||||
they should be (e.g.,) 1.1b3 or 1.1beta3 | |||||
- Changing version here causes org/aspectj/bridge/Version.java to be updated | |||||
- also change org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/messages.properties | |||||
- build.version.eclipse.plugins should be set to "9.9.9" for "DEVELOPMENT", and | |||||
- the same as build.version.long (in major.minor.service form) for releases. | |||||
--> | |||||
<property name="min.vm" value="13"/> | |||||
<property name="max.vm" value="15"/> | |||||
<property name="build.verbose" value="false"/> | |||||
<property name="build.version" value="DEVELOPMENT"/> | |||||
<property name="build.version.base" value="1.2"/> | |||||
<property name="build.version.long" value="DEVELOPMENT"/> | |||||
<property name="build.version.short" value="DEVELOPMENT"/> | |||||
<!-- formats comply with SimpleDateFormat --> | |||||
<property name="build.time.format" value="EEEE MMM d, yyyy 'at' HH:mm:ss z"/> | |||||
<property name="build.date.format" value="EEEE MMM d, yyyy"/> | |||||
<tstamp> | |||||
<format property="build.date" | |||||
pattern="${build.date.format}" | |||||
timezone="GMT"/> | |||||
<format property="build.time" | |||||
pattern="${build.time.format}" | |||||
timezone="GMT"/> | |||||
</tstamp> | |||||
<property name="company.name" value="aspectj.org"/> | |||||
<property name="copyright.allRights.from1998" | |||||
value="Copyright (c) 1998-2001 Xerox Corporation, 2002 Palo Alto Research Center, Incorporated, 2003-2008 Contributors. All rights reserved." /> | |||||
<!-- aj... names are generated, can be mutated/cleaned --> | |||||
<!-- these names are known to BuildModule.java and common to all --> | |||||
<property name="aj.build.dir" | |||||
location="${aspectj.modules.dir}/aj-build"/> | |||||
<property name="aj.temp.dir" | |||||
location="${aj.build.dir}/temp"/> | |||||
<property name="aj.src.dir" | |||||
location="${aj.build.dir}/src"/> | |||||
<property name="aj.jar.dir" | |||||
location="${aj.build.dir}/jars"/> | |||||
<property name="aj.dist.dir" | |||||
location="${aj.build.dir}/dist"/> | |||||
<property name="aj.webDeploy.dir" | |||||
location="${aj.build.dir}/webDeploy"/> | |||||
<property name="aj.install.dir" | |||||
location="${aj.build.dir}/install"/> | |||||
<property name="aj.build.allresults.dir" | |||||
location="${aj.build.dir}/allresults"/> | |||||
<property name="aj.build.allfailures.file" | |||||
location="${aj.build.allresults.dir}/allfailures.txt"/> | |||||
<property name="aj.build.results.dir" | |||||
location="${aj.build.dir}/results"/> | |||||
<property name="aj.failure.file" | |||||
location="${aj.build.results.dir}/failures.txt"/> | |||||
<property name="aj.build-id.file" | |||||
location="${aj.build.results.dir}/build-id.txt"/> | |||||
<property name="aj.junit.dir" | |||||
location="${aj.build.results.dir}/junit"/> | |||||
<property name="aj.logs.dir" | |||||
location="${aj.build.results.dir}/logs"/> | |||||
<!-- aspectj... names are sources, not to be mutated --> | |||||
<property name="aspectj.modules.lib.dir" | |||||
location="${aspectj.modules.dir}/lib"/> | |||||
<property name="aspectj.modules.build.dir" | |||||
location="${aspectj.modules.dir}/build"/> | |||||
<property name="aspectj.modules.docs.dir" | |||||
location="${aspectj.modules.dir}/docs"/> | |||||
<property name="aspectj.modules.tests.dir" | |||||
location="${aspectj.modules.dir}/tests"/> | |||||
<!-- BuildModule.java assumes products are here --> | |||||
<property name="aspectj.products.dir" | |||||
location="${aspectj.modules.build.dir}/products"/> | |||||
<property name="aspectj.modules.tests.dir" | |||||
location="${aspectj.modules.dir}/tests"/> | |||||
<property file="${aspectj.modules.build.dir}/junit-patterns.properties"/> | |||||
<property name="aspectj.tools.modules.13" | |||||
value="ajde,ajde.core,ajdoc,asm,bridge,loadtime,org.aspectj.ajdt.core,runtime,taskdefs,util,weaver"/> | |||||
<property name="aspectj.tools.modules.15" | |||||
value="loadtime5,aspectj5rt,weaver5"/> | |||||
<condition property="aspectj.tools.modules" | |||||
value="${aspectj.tools.modules.13},${aspectj.tools.modules.15}"> | |||||
<equals arg1="1.5" arg2="${ant.java.version}"/> | |||||
</condition> | |||||
<condition property="aspectj.tools.modules" | |||||
value="${aspectj.tools.modules.13}"> | |||||
<not> | |||||
<equals arg1="1.5" arg2="${ant.java.version}"/> | |||||
</not> | |||||
</condition> | |||||
<property name="aspectj.test.modules" | |||||
value="build,testing,testing-client,testing-drivers,testing-util,tests"/> | |||||
<property name="aspectj.compilerTest.modules" | |||||
value="tests"/> | |||||
<property name="aspectj.other.modules" | |||||
value="docs,eclipse.plugin"/> | |||||
<jar-property name="junit.jar" | |||||
location="${aspectj.modules.lib.dir}/junit/junit.jar"/> | |||||
<!-- TODO need version-specific JDK? --> | |||||
<guarded-property name="jdk.tools.jar" | |||||
location="${java.home}/../lib/tools.jar"/> | |||||
<guarded-property name="jdk.tools.jar" | |||||
location="${java.home}/lib/tools.jar"/> | |||||
<guarded-property name="lib.test.aspectjrt.jar" | |||||
location="${aspectj.modules.lib.dir}/test/aspectjrt.jar"/> | |||||
<property name="init-properties.done" value="true"/> | |||||
</target> | |||||
<target name="init-taskdefs" | |||||
depends="init-properties" | |||||
unless="init-taskdefs.done" > | |||||
<jar-property name="aspectj.build.jar" | |||||
location="${aspectj.modules.lib.dir}/build/build.jar"/> | |||||
<jar-property name="lib.ant.jar" | |||||
location="${aspectj.modules.lib.dir}/ant/lib/ant.jar"/> | |||||
<taskdef resource="org/aspectj/internal/tools/ant/taskdefs/taskdefs.properties" | |||||
classpath="${aspectj.build.jar}"/> | |||||
<path id="ant.lib.path"> | |||||
<fileset dir="${aspectj.modules.lib.dir}/ant/lib"> | |||||
<include name="**/*.jar"/> | |||||
</fileset> | |||||
</path> | |||||
<taskdef name="junit" | |||||
classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask" | |||||
classpathref="ant.lib.path"/> | |||||
<available classname="org.apache.xalan.processor.TransformerFactoryImpl" | |||||
property="xalan.available" | |||||
value="true"> | |||||
<classpath refid="ant.lib.path"/> | |||||
</available> | |||||
<condition property="junitreport.available" value="true"> | |||||
<istrue value="${xalan.available}"/> | |||||
</condition> | |||||
<echo message="junitreport.available: ${junitreport.available}"/> | |||||
<antcall target="init-junitreport"/> | |||||
</target> | |||||
<target name="init-junitreport" depends="init-properties" | |||||
if="xalan.available"> | |||||
<taskdef name="junitreport" | |||||
classname="org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator" | |||||
classpathref="ant.lib.path"/> | |||||
</target> | |||||
<target name="init-directories" | |||||
depends="init-properties" | |||||
description="ensure dirs, possibly many times in a build"> | |||||
<mkdir dir="${aj.build.dir}" /> | |||||
<mkdir dir="${aj.temp.dir}" /> | |||||
<mkdir dir="${aj.jar.dir}" /> | |||||
<mkdir dir="${aj.dist.dir}" /> | |||||
<mkdir dir="${aj.install.dir}" /> | |||||
<mkdir dir="${aj.logs.dir}" /> | |||||
</target> | |||||
<target name="init-filters" | |||||
depends="init-properties" | |||||
unless="init-filters.done" > | |||||
<!-- build.version and build.date used in filters throughout, and | |||||
build.version.base used in filtering manifest, but | |||||
others used mainly for installer-resources/properties.txt --> | |||||
<filter token="build.version" value="${build.version}"/> | |||||
<filter token="build.version.base" value="${build.version.base}"/> | |||||
<filter token="build.version.long" value="${build.version.long}"/> | |||||
<filter token="build.version.short" value="${build.version.short}"/> | |||||
<filter token="build.time.format" value="${build.time.format}"/> | |||||
<filter token="build.date.format" value="${build.date.format}"/> | |||||
<filter token="build.date" value="${build.date}"/> | |||||
<filter token="build.time" value="${build.time}"/> | |||||
<filter token="company.name" value="${company.name}"/> | |||||
<filter token="copyright.allRights.from1998" | |||||
value="${copyright.allRights.from1998}" /> | |||||
<property name="init-filters.done" value="done"/> | |||||
</target> | |||||
<target name="clean-directories" depends="init-properties"> | |||||
<delete quiet="on"> | |||||
<fileset dir="${aj.build.dir}" includes="*,**/*"/> | |||||
</delete> | |||||
<antcall target="init-directories"/> | |||||
</target> | |||||
<target name="clean-jars" | |||||
depends="init-directories" | |||||
unless="clean-jars.done" > | |||||
<delete quiet="on"> | |||||
<fileset dir="${aj.jar.dir}" includes="*"/> | |||||
</delete> | |||||
<property name="clean-jars.done" value="done"/> | |||||
</target> | |||||
<target name="clean-keep-results" depends="init-properties"> | |||||
<delete> | |||||
<fileset dir="${aj.build.dir}"> | |||||
<exclude name="results/*"/> | |||||
<exclude name="results/**"/> | |||||
<exclude name="allresults/*"/> | |||||
<exclude name="allresults/**"/> | |||||
</fileset> | |||||
</delete> | |||||
</target> | |||||
<target name="clean-default-results" depends="init-properties"> | |||||
<delete> | |||||
<fileset dir="${aj.build.results.dir}" includes="*,**/*"/> | |||||
</delete> | |||||
</target> | |||||
<target name="clean-result" depends="init-properties"> | |||||
<delete quiet="on"> | |||||
<fileset dir="${aj.build.results.dir}" includes="*,**/*"/> | |||||
</delete> | |||||
</target> | |||||
<macrodef name="save-build-id" | |||||
description="save ${id} to ${aj.build-id.file}"> | |||||
<attribute name="id"/> | |||||
<sequential> | |||||
<echo message="@{id}" file="${aj.build-id.file}"/> | |||||
</sequential> | |||||
</macrodef> | |||||
<macrodef name="load-build-id"> | |||||
<attribute name="property"/> | |||||
<sequential> | |||||
<available property="aj.build-id.file.available" | |||||
file="${aj.build-id.file}"/> | |||||
<antcall target="ensure-build-id"/> | |||||
<loadfile srcfile="${aj.build-id.file}" property="@{property}"/> | |||||
</sequential> | |||||
</macrodef> | |||||
<target name="ensure-build-id" unless="aj.build-id.file.available" | |||||
description="create datestamp build id in ${aj.build-id.file} if n/a"> | |||||
<tstamp> | |||||
<format property="build.id.name" | |||||
timezone="GMT+10" | |||||
pattern="yyyyMMdd-hhmmss" | |||||
/> | |||||
</tstamp> | |||||
<echo file="${aj.build-id.file}" message="${build.id.name}"/> | |||||
</target> | |||||
<target name="save-result" depends="init-properties"> | |||||
<load-build-id property="build.id"/> | |||||
<copy todir="${aj.build.allresults.dir}/${build.id}"> | |||||
<fileset dir="${aj.build.results.dir}" /> | |||||
</copy> | |||||
</target> | |||||
<target name="echo-properties" depends="init-properties"> | |||||
<echo> | |||||
Build Properties | |||||
build.date = ${build.date} | |||||
build.time = ${build.time} | |||||
build.version = ${build.version} | |||||
build.version.long = ${build.version.long} | |||||
build.version.short = ${build.version.short} | |||||
aspectj.modules.dir = ${aspectj.modules.dir} | |||||
aj.build.dir = ${aj.build.dir} | |||||
ant.home = ${ant.home} | |||||
java.home = ${java.home} | |||||
java11.home = ${java11.home} | |||||
java13.home = ${java13.home} | |||||
java14.home = ${java14.home} | |||||
java15.home = ${java15.home} | |||||
</echo> | |||||
</target> | |||||
<macrodef name="guarded-property" | |||||
description="set property {name} to {location} if unset and {location} exists"> | |||||
<attribute name="name"/> | |||||
<attribute name="location"/> | |||||
<sequential> | |||||
<property name="@{name}.path" | |||||
location="@{location}"/> | |||||
<condition property="@{name}" | |||||
value="${@{name}.path}"> | |||||
<and> | |||||
<not> | |||||
<isset property="@{name}"/> | |||||
</not> | |||||
<available file="${@{name}.path}"/> | |||||
</and> | |||||
</condition> | |||||
</sequential> | |||||
</macrodef> | |||||
<macrodef name="clean-dir"> | |||||
<attribute name="dir"/> | |||||
<sequential> | |||||
<mkdir dir="@{dir}"/> | |||||
<delete> | |||||
<fileset dir="@{dir}" includes="*,**/*"/> | |||||
</delete> | |||||
<mkdir dir="@{dir}"/> | |||||
</sequential> | |||||
</macrodef> | |||||
<!-- | |||||
Reporting failures | |||||
Failure-reports supports running multiple build targets in sequence for a | |||||
configuration, saving off those results, doing it over, etc., and then | |||||
checking the result (of the current builds or all builds), i.e., | |||||
# first set of builds | |||||
- build, report-if-failed ... | |||||
- build, report-if-failed ... | |||||
... | |||||
- {save-build-id} first-set | |||||
- save-result | |||||
- clean-keep-results | |||||
- clean-default-results | |||||
# second set of builds | |||||
- build, report-if-failed ... | |||||
... | |||||
- save-result | |||||
# fail build if anything in either set failed | |||||
- fail-if-allresults-allfailures | |||||
Clients call | |||||
<report-if-failed property="failed" text="JUnit failed"/> | |||||
to signal failure. This goes into results/failures.txt, to be read later. | |||||
Many clients can call this, across many (current) build invocations, so | |||||
results just accumulate. Clients should never call <fail> directly; while | |||||
the cruise-control script can handle build failures, they won't be recorded | |||||
in a way that supports easy evaluation. | |||||
To fail if the current builds fail, do | |||||
<antcall target="fail-if-results-failures"/> | |||||
You can do a sequence of builds (e.g., in 1.3), save the results off, | |||||
and do it again (e.g., in 1.4), save the results, and then compare them. | |||||
Use save-result to store the current build results in ../allresults. | |||||
Between such builds, you can do a clean-keep-results (to clear out jars | |||||
and such), followed by clean-default-results (to clear the current results). | |||||
(The normal clean also cleans out any results, so avoid that when saving | |||||
results from multiple builds.) | |||||
Each build can be named using save-build-id. This name must be a valid | |||||
directory name. When the results are saved to ../allresults, the directory | |||||
name will use the most recent build-id. If none has been saved, then this | |||||
creates a name out of the date (down to the second). | |||||
To fail if any of the saved builds has failed, do fail-if-allresults-allfailures. | |||||
This target ignores the current builds (if they are unsaved). | |||||
--> | |||||
<macrodef name="report-if-failed"> | |||||
<attribute name="property"/> | |||||
<attribute name="text"/> | |||||
<sequential> | |||||
<echo level="debug" message="property: @{property}: ${@{property}}"/> | |||||
<echo level="debug" message="text: @{text}: ${@{text}}"/> | |||||
<condition property="failed" value="true"> | |||||
<isset property="@{property}"/> | |||||
</condition> | |||||
<echo level="debug" message="failed: ${failed}"/> | |||||
<antcall target="do-report-fail"> | |||||
<param name="text" value="@{text}"/> | |||||
</antcall> | |||||
</sequential> | |||||
</macrodef> | |||||
<target name="do-report-fail" | |||||
if="failed"> | |||||
<echo append="true" file="${aj.failure.file}">${text} | |||||
</echo> | |||||
</target> | |||||
<target name="fail-if-results-failures" depends="init-properties"> | |||||
<fail-if-failures failureFile="${aj.failure.file}"/> | |||||
</target> | |||||
<target name="fail-if-allresults-allfailures" depends="init-properties"> | |||||
<concat destfile="${aj.build.allfailures.file}"> | |||||
<fileset dir="${aj.build.allresults.dir}" | |||||
includes="*/failures.txt"/> | |||||
</concat> | |||||
<fail-if-failures failureFile="${aj.build.allfailures.file}"/> | |||||
</target> | |||||
<macrodef name="fail-if-failures" | |||||
description="fail if ${failureFile} exists and is not empty"> | |||||
<attribute name="failureFile"/> | |||||
<sequential> | |||||
<loadfile | |||||
failonerror="false" | |||||
property="failures" | |||||
srcfile="@{failureFile}"/> | |||||
<fail> | |||||
<condition> | |||||
<length file="@{failureFile}" | |||||
when="greater" length="0"/> | |||||
</condition> | |||||
# @{failureFile} failures: | |||||
${failures} | |||||
</fail> | |||||
</sequential> | |||||
</macrodef> | |||||
<macrodef name="jar-property"> | |||||
<attribute name="name"/> | |||||
<attribute name="location"/> | |||||
<sequential> | |||||
<property name="@{name}" | |||||
location="@{location}"/> | |||||
<available file="${@{name}}" | |||||
property="@{name}.available" | |||||
value="${@{name}}"/> | |||||
<fail unless="@{name}.available" | |||||
message="unable to find @{name}: ${@{name}}"/> | |||||
</sequential> | |||||
</macrodef> | |||||
<macrodef name="set-available" | |||||
description="set property and property.available if path exists"> | |||||
<attribute name="property"/> | |||||
<attribute name="path"/> | |||||
<sequential> | |||||
<property name="@{property}.location" | |||||
location="@{path}"/> | |||||
<available property="@{property}" | |||||
file="${@{property}.location}" | |||||
value="${@{property}.location}"/> | |||||
<condition property="@{property}.available"> | |||||
<equals arg1="${@{property}.location}" arg2="${@{property}}"/> | |||||
</condition> | |||||
</sequential> | |||||
</macrodef> | |||||
<macrodef name="require-available"> | |||||
<attribute name="property"/> | |||||
<attribute name="path"/> | |||||
<attribute name="message" default=""/> | |||||
<sequential> | |||||
<set-available property="@{property}" path="@{path}"/> | |||||
<fail unless="@{property}.available"> | |||||
@{message} (property "@{property}" not at "@{path}") | |||||
</fail> | |||||
</sequential> | |||||
</macrodef> | |||||
</project> |
<!-- -*- Mode: SGML; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- --> | |||||
<!-- ========================================================================= --> | |||||
<!-- Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC), --> | |||||
<!-- 2003-2005 Contributors --> | |||||
<!-- All rights reserved. --> | |||||
<!-- This program and the accompanying materials are made available --> | |||||
<!-- under the terms of the Eclipse Public License v 2.0 --> | |||||
<!-- which accompanies this distribution and is available at --> | |||||
<!-- https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt --> | |||||
<!-- --> | |||||
<!-- Contributors: (See CVS checkin's) --> | |||||
<!-- Xerox/PARC initial implementation --> | |||||
<!-- Adrian Colyer / George Harley eclipse plugin targets --> | |||||
<!-- ========================================================================= --> | |||||
<project name="build" default="all" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:maven="antlib:org.apache.maven.artifact.ant"> | |||||
<target name="all" depends="aspectj"> | |||||
<antcall target="eclipse.plugins"/> | |||||
</target> | |||||
<target name="clean" depends="clean-directories"/> | |||||
<target name="compile" depends="build-module" | |||||
description="compile module ${module.name} (without tests, by default)"/> | |||||
<target name="compile-tests" depends="init" | |||||
description="compile module ${module.name} tests"> | |||||
<assemble-module-test module="${module.name}"/> | |||||
</target> | |||||
<target name="test" depends="compile-tests"> | |||||
<antcall target="do-test-junit"/> | |||||
</target> | |||||
<!-- ===================================================================== --> | |||||
<!-- Init --> | |||||
<!-- ===================================================================== --> | |||||
<property name="modules.dir" location="${basedir}/.."/> | |||||
<property name="module.name" value="${ant.project.name}"/> | |||||
<import file="${modules.dir}/build/build-properties.xml"/> | |||||
<target name="init" depends="init-properties,init-directories"> | |||||
<property name="build.config" value=""/> | |||||
<property name="trim.testing.default" value="true"/> | |||||
<property name="aj.installer.jar" location="${aj.dist.dir}/aspectj-${build.version.long}.jar"/> | |||||
<available property="ant.lib.aspectjtools" | |||||
file="${ant.home}/lib/aspectjtools.jar" | |||||
value="Expect classpath errors from ${ant.home}/lib/aspectjtools.jar"/> | |||||
<available property="ant.lib.aspectjrt" | |||||
file="${ant.home}/lib/aspectjrt.jar" | |||||
value="Expect classpath errors from ${ant.home}/lib/aspectjrt.jar"/> | |||||
<available property="testing.drivers.all.available" | |||||
file="${aj.jar.dir}/testing-drivers-all.jar" | |||||
value="${aj.jar.dir}/testing-drivers-all.jar"/> | |||||
</target> | |||||
<target name="version-uptodate" depends="init,init-taskdefs" | |||||
unless="version-uptodate.done"> | |||||
<!-- XXX change task to pre-check & avoid scan if dates uptodate --> | |||||
<versionuptodate | |||||
version="${build.version}" | |||||
versionSourceFile="${aspectj.modules.dir}/bridge/src/org/aspectj/bridge/Version.java" | |||||
versionTagFile="${aj.temp.dir}/versionUptodate"/> | |||||
<available file="${aj.temp.dir}/versionUptodate" | |||||
property="version.uptodate"/> | |||||
<property name="version-uptodate.done" value="done"/> | |||||
</target> | |||||
<target name="init-version" depends="init,init-filters,version-uptodate" > | |||||
<antcall target="init-filters"/> | |||||
<copy file="${aspectj.modules.dir}/build/lib/BridgeVersion.java.txt" | |||||
tofile="${aspectj.modules.dir}/bridge/src/org/aspectj/bridge/Version.java" | |||||
overwrite="yes" filtering="yes"/> | |||||
<property name="init.version.done" value="done"/> | |||||
<!-- consider checking this in? --> | |||||
</target> | |||||
<!-- ===================================================================== --> | |||||
<!-- Misc setup and warnings --> | |||||
<!-- ===================================================================== --> | |||||
<target name="warn.ant.lib.aspectjrt" if="ant.lib.aspectjrt"> | |||||
<echo message="----- WARNING: ${ant.lib.aspectjrt}" /> | |||||
</target> | |||||
<target name="warn.ant.lib.aspectjtools" if="ant.lib.aspectjtools"> | |||||
<echo message="----- WARNING: ${ant.lib.aspectjtools}" /> | |||||
</target> | |||||
<target name="fail-unless-boot-libraries-uptodate" depends="init" | |||||
description="fail unless all boot libraries are up-to-date"> | |||||
<antcall target="verify-boot-lib"> | |||||
<param name="boot.lib" value="test/aspectjrt.jar"/> | |||||
<param name="vbl.module.name" value="runtime"/> | |||||
</antcall> | |||||
<antcall target="verify-boot-lib"> | |||||
<param name="boot.lib" value="build/build.jar"/> | |||||
<param name="vbl.module.name" value="build"/> | |||||
</antcall> | |||||
<antcall target="verify-boot-lib"> | |||||
<param name="boot.lib" value="test/testing-client.jar"/> | |||||
<param name="vbl.module.name" value="testing-client"/> | |||||
</antcall> | |||||
<echo message="fyi, bridge/util changes rarely mean client is invalid"/> | |||||
<antcall target="verify-boot-lib"> | |||||
<param name="boot.lib" value="test/testing-client.jar"/> | |||||
<param name="vbl.module.name" value="util"/> | |||||
</antcall> | |||||
<antcall target="verify-boot-lib"> | |||||
<param name="boot.lib" value="test/testing-client.jar"/> | |||||
<param name="vbl.module.name" value="bridge"/> | |||||
</antcall> | |||||
<echo message="all boot libraries verified"/> | |||||
</target> | |||||
<target name="update-tree" depends="init" | |||||
description="update tree"> | |||||
<fail unless="CVSROOT" | |||||
message="required: {ant} -DCVSROOT=... ..."/> | |||||
<cvs cvsRoot="${CVSROOT}" | |||||
dest="${aspectj.modules.dir}" | |||||
quiet="on" | |||||
failonerror="on" | |||||
command="update -dP" /> | |||||
</target> | |||||
<!-- ===================================================================== --> | |||||
<!-- antcall targets --> | |||||
<!-- ===================================================================== --> | |||||
<target name="build-product" depends="init,init-taskdefs,init-version" description="build $${product.name}"> | |||||
<ajbuild jarDir="${aj.jar.dir}" | |||||
baseDir="${aspectj.modules.dir}" | |||||
distDir="${aj.dist.dir}" | |||||
productDir="${aspectj.modules.dir}/build/products/${product.name}" | |||||
trimTesting="true" | |||||
buildConfig="${build.config}" | |||||
version="${build.version.long}" | |||||
verbose="${build.verbose}" | |||||
failonerror="true"/> | |||||
</target> | |||||
<target name="build-module" depends="init,init-taskdefs,init-version"> | |||||
<ajbuild module="${module.name}" | |||||
baseDir="${aspectj.modules.dir}" | |||||
distDir="${aj.dist.dir}" | |||||
jarDir="${aj.jar.dir}" | |||||
trimTesting="${trim.testing}" | |||||
buildConfig="${build.config}" | |||||
version="${build.version.long}" | |||||
verbose="${build.verbose}" | |||||
assembleall="${assemble}" | |||||
failonerror="true"/> | |||||
</target> | |||||
<macrodef name="build-module-all"> | |||||
<attribute name="module"/> | |||||
<attribute name="trimTesting" default="${trim.testing.default}"/> | |||||
<sequential> | |||||
<antcall target="build-module"> | |||||
<param name="module.name" value="@{module}"/> | |||||
<param name="trim.testing" value="@{trimTesting}"/> | |||||
<param name="assemble" value="true"/> | |||||
</antcall> | |||||
</sequential> | |||||
</macrodef> | |||||
<macrodef name="build-module"> | |||||
<attribute name="module"/> | |||||
<attribute name="trimTesting" default="${trim.testing.default}"/> | |||||
<attribute name="assemble" default="false"/> | |||||
<sequential> | |||||
<antcall target="build-module"> | |||||
<param name="module.name" value="@{module}"/> | |||||
<param name="trim.testing" value="@{trimTesting}"/> | |||||
<param name="assemble" value="@{assemble}"/> | |||||
</antcall> | |||||
</sequential> | |||||
</macrodef> | |||||
<macrodef name="assemble-module-test"> | |||||
<attribute name="module"/> | |||||
<sequential> | |||||
<build-module module="@{module}" assemble="true" trimTesting="false"/> | |||||
</sequential> | |||||
</macrodef> | |||||
<target name="create-installer" depends="init,init-taskdefs,init-filters" | |||||
description="create ${installer.file} from ${staging.dir} using ${htmlSrc.dir} and ${simpleClassName}"> | |||||
<!-- init-filters: filter on copy used by ajinstaller taskdef --> | |||||
<delete quiet="on" file="${installer.file}"/> | |||||
<ajinstaller zipfile="${installer.file}" | |||||
installerclassjar="${aspectj.build.jar}" | |||||
basedir="${staging.dir}" | |||||
mainclass="$$installer$$.org.aspectj.${simpleClassName}" | |||||
htmlSrc="${htmlSrc.dir}" | |||||
resourcesSrc="${aspectj.modules.build.dir}/installer-resources"/> | |||||
</target> | |||||
<target name="verify-boot-lib" depends="init" | |||||
description="fail if ${boot.lib} is out of date wrt ${vbl.module.name}"> | |||||
<uptodate property="lib-warning-${vbl.module.name}" | |||||
targetfile="${aspectj.modules.dir}/lib/${boot.lib}"> | |||||
<srcfiles dir="${aspectj.modules.dir}/${vbl.module.name}/src" | |||||
includes="**/*.java"/> | |||||
</uptodate> | |||||
<fail unless="lib-warning-${vbl.module.name}" | |||||
message="${boot.lib} out of date wrt module ${vbl.module.name}"/> | |||||
</target> | |||||
<!-- ===================================================================== --> | |||||
<!-- test targets --> | |||||
<!-- ===================================================================== --> | |||||
<target name="test-run-all-junit-tests" | |||||
depends="init" | |||||
description="run unit tests via run-all-junit-tests module"> | |||||
<antcall target="test"> | |||||
<param name="module.name" value="run-all-junit-tests"/> | |||||
</antcall> | |||||
</target> | |||||
<target name="test-compiler-tests" | |||||
depends="init" | |||||
description="run compiler tests via tests module"> | |||||
<antcall target="test"> | |||||
<param name="module.name" value="tests"/> | |||||
</antcall> | |||||
</target> | |||||
<target name="test-each-module" | |||||
depends="init" | |||||
description="run JUnit tests for each module"> | |||||
<subant target="test"> | |||||
<filelist dir="${aspectj.modules.dir}" | |||||
files="${aspectj.tools.modules},${aspectj.test.modules}"/> | |||||
</subant> | |||||
</target> | |||||
<!-- | |||||
<target name="ivy.init" unless="ivy.initialized"> | |||||
<property name="ivy.lib.dir" value="n:/apache-ivy-2.1.0/lib"/> | |||||
<property name="ivy.settings.file" value="n:/workspaces/aspectj16_1/build/ivysettings.xml"/> | |||||
<taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant"> | |||||
<classpath> | |||||
<path location="${ivy.lib.dir}/ivy.jar"/> | |||||
<path location="${ivy.lib.dir}/org.springframework.build.aws.ivy.jar"/> | |||||
<path location="${ivy.lib.dir}/commons-codec.jar"/> | |||||
<path location="${ivy.lib.dir}/commons-httpclient.jar"/> | |||||
<path location="${ivy.lib.dir}/commons-logging.jar"/> | |||||
<path location="${ivy.lib.dir}/jets3t.jar"/> | |||||
<path location="${ivy.lib.dir}"/> | |||||
</classpath> | |||||
</taskdef> | |||||
<ivy:settings file="${ivy.settings.file}"/> | |||||
<property name="ivy.initialized" value="true"/> | |||||
</target> | |||||
--> | |||||
<target name="maven.init" > | |||||
<property name="org.apache.maven.ant.version" value="2.0.10"/> | |||||
<property name="org.springframework.build.aws.maven.version" value="2.0.0.RELEASE"/> | |||||
<!-- | |||||
<ivy:cachepath resolveId="maven.ant.tasks.classpath" pathid="maven.ant.tasks.classpath" | |||||
organisation="org.apache.maven" module="com.springsource.org.apache.maven.ant" | |||||
revision="${org.apache.maven.ant.version}" conf="runtime" type="jar" inline="true" log="download-only"/> | |||||
--> | |||||
<!-- | |||||
<taskdef resource="org/apache/maven/artifact/ant/antlib.xml" uri="antlib:org.apache.maven.artifact.ant" | |||||
classpathref="maven.ant.tasks.classpath"/> | |||||
--> | |||||
<maven:install-provider groupId="org.springframework.build.aws" artifactId="org.springframework.build.aws.maven" | |||||
version="${org.springframework.build.aws.maven.version}"/> | |||||
<!-- | |||||
<maven:install-provider groupId="org.springframework.build" artifactId="aws.maven" | |||||
version="${org.springframework.build.aws.maven.version}"/> | |||||
--> | |||||
</target> | |||||
<target name="junitreport" depends="init,init-taskdefs" | |||||
if="junitreport.available"> | |||||
<clean-dir dir="${aj.junit.dir}/html"/> | |||||
<junitreport todir="${aj.junit.dir}/html"> | |||||
<fileset dir="${aj.junit.dir}"> | |||||
<include name="**/TEST-*.xml"/> | |||||
</fileset> | |||||
<report format="frames" todir="${aj.junit.dir}/html"/> | |||||
</junitreport> | |||||
<pathconvert property="jur.url" targetos="unix"> | |||||
<path location="${aj.junit.dir}/html/index.html"/> | |||||
</pathconvert> | |||||
<echo message="see file:${jur.url}"/> | |||||
</target> | |||||
<target name="do-test-junit" | |||||
depends="init-taskdefs" | |||||
description="run junit tests for a module using module root or leaves"> | |||||
<property name="dtj.dir" | |||||
location="${aj.junit.dir}/${module.name}"/> | |||||
<mkdir dir="${dtj.dir}"/> | |||||
<condition property="dtj.includes" | |||||
value="${junit.includes}" | |||||
else="${junit.rootSuites}"> | |||||
<istrue value="${junit.leaves}"/> | |||||
</condition> | |||||
<condition property="dtj.excludes" | |||||
value="${junit.excludes}" | |||||
else=""> | |||||
<istrue value="${junit.leaves}"/> | |||||
</condition> | |||||
<junit | |||||
dir="${aspectj.modules.build.dir}" | |||||
failureproperty="test-junit-${module.name}.failed" | |||||
fork="on" | |||||
forkmode="perTest" | |||||
maxmemory="400m" | |||||
includeAntRuntime="off" | |||||
printsummary="yes" | |||||
haltonfailure="${haltOnTestFailure}" > | |||||
<classpath> | |||||
<pathelement location="${aj.jar.dir}/${module.name}-test-all.jar"/> | |||||
<!-- see skipped libraries in Builder.properties --> | |||||
<pathelement location="${jdk.tools.jar}"/> | |||||
<pathelement location="${aspectj.modules.lib.dir}/junit/junit.jar"/> | |||||
<fileset dir="${aspectj.modules.lib.dir}/commons" includes="commons.jar"/> | |||||
<!-- XML api's used by loadtime, also needed when running under 1.3 per Ant FAQ --> | |||||
<fileset dir="${aspectj.modules.lib.dir}/ant/lib" | |||||
includes="ant.jar,ant-junit.jar,xml-apis.jar,xercesImpl.jar"/> | |||||
</classpath> | |||||
<jvmarg value="-Daspectjrtpath=${lib.test.aspectjrt.jar}" /> | |||||
<formatter type="xml"/> | |||||
<batchtest todir="${dtj.dir}"> | |||||
<fileset dir="${modules.dir}/${module.name}/testsrc" | |||||
includes="${dtj.includes}" | |||||
excludes="${dtj.excludes}"/> | |||||
</batchtest> | |||||
</junit> | |||||
<report-if-failed text="JUnit tests for ${module.name} failed" | |||||
property="test-junit-${module.name}.failed"/> | |||||
</target> | |||||
<!-- ===================================================================== --> | |||||
<!-- custom targets --> | |||||
<!-- ===================================================================== --> | |||||
<target name="build-harness-jar" depends="init" | |||||
description="build harness jar from scratch"> | |||||
<antcall target="clean-jars"/> | |||||
<assemble-module-test module="testing-drivers"/> | |||||
</target> | |||||
<target name="build-testing-jars" depends="init" | |||||
description="build testing jars from scratch"> | |||||
<antcall target="build-harness-jar"/> | |||||
</target> | |||||
<target name="build-testing-client" depends="init-taskdefs,init"> | |||||
<build-module module="testing-client" assemble="true"/> | |||||
<assemble-module-test module="testing-client"/> | |||||
<echo> | |||||
To use testing client jar in tests, | |||||
mv ../aj-build/jars/testing-client-all.jar ../lib/tests/testing-client.jar | |||||
</echo> | |||||
</target> | |||||
<target name="aspectj" depends="init,aspectjtools-dist,docs-dist" description="create installer from local distributions"> | |||||
<property name="installer.staging.dir" location="${aj.temp.dir}/installer-staging"/> | |||||
<clean-dir dir="${installer.staging.dir}"/> | |||||
<copy todir="${installer.staging.dir}"> | |||||
<fileset dir="${aj.dist.dir}/tools"/> | |||||
<fileset dir="${aj.dist.dir}/docs"/> | |||||
</copy> | |||||
<antcall target="create-installer"> | |||||
<param name="installer.file" location="${aj.installer.jar}"/> | |||||
<param name="staging.dir" location="${installer.staging.dir}"/> | |||||
<param name="htmlSrc.dir" location="${aspectj.modules.build.dir}/products/aspectj/install"/> | |||||
<param name="simpleClassName" value="ToolsInstaller"/> | |||||
</antcall> | |||||
<delete dir="${installer.staging.dir}"/> | |||||
</target> | |||||
<target name="docs-dist" depends="init"> | |||||
<ant dir="${aspectj.modules.dir}/docs" | |||||
antfile="build.xml" | |||||
target="local-dist" | |||||
inheritAll="false"/> | |||||
</target> | |||||
<target name="aspectjrt" depends="init" | |||||
description="build aspectjrt.jar (differently than release)"> | |||||
<build-module-all module="aspectj5rt"/> | |||||
<copy file="${aj.jar.dir}/aspectj5rt-all.jar" | |||||
tofile="${aj.jar.dir}/aspectjrt.jar"/> | |||||
</target> | |||||
<target name="compile-runtime-11" depends="init-properties" | |||||
description="compile runtime under 1.1 - fails, but by how much?"> | |||||
<condition property="cr1.in13"> | |||||
<equals arg1="1.3" arg2="${ant.java.version}"/> | |||||
</condition> | |||||
<antcall target="compile-runtime-11-flag-unless13"/> | |||||
<antcall target="compile-runtime-11-do-if13"/> | |||||
</target> | |||||
<target name="compile-runtime-11-flag-unless13" depends="init-properties" | |||||
unless="cr1.in13"> | |||||
<echo message="Skipping compile-runtime-11 unless 1.3"/> | |||||
</target> | |||||
<target name="compile-runtime-11-do-if13" depends="init-properties" | |||||
if="cr1.in13"> | |||||
<mkdir dir="${aj.build.dir}/classes-1.1"/> | |||||
<property name="java11.classes.zip" | |||||
location="${java11.home}/lib/classes.zip"/> | |||||
<available property="classes.zip.available" | |||||
file="${java11.classes.zip}"/> | |||||
<fail unless="classes.zip.available" message="no 1.1 bootclasspath"/> | |||||
<javac | |||||
compiler="javac1.1" | |||||
bootclasspath="${java11.classes.zip}" | |||||
source="1.3" | |||||
includejavaruntime="no" | |||||
includeantruntime="no" | |||||
destdir="${aj.build.dir}/classes-1.1" | |||||
srcdir="${aspectj.modules.dir}/runtime/src" | |||||
target="1.1" | |||||
verbose="false" | |||||
failonerror="true" | |||||
/> | |||||
<delete dir="${aj.build.dir}/classes-1.1"/> | |||||
</target> | |||||
<!-- ===================================================================== --> | |||||
<!-- boilerplate antcalls --> | |||||
<!-- ===================================================================== --> | |||||
<!-- for any-[module|product], define [module|product].name --> | |||||
<target name="any-module" depends="init"> | |||||
<fail unless="module.name" message="use -Dmodule.name=... to define"/> | |||||
<build-module module="${module.name}"/> | |||||
</target> | |||||
<target name="any-module-all" depends="init"> | |||||
<fail unless="module.name" message="use -Dmodule.name=... to define"/> | |||||
<build-module-all module="${module.name}"/> | |||||
</target> | |||||
<target name="any-product" depends="init"> | |||||
<fail unless="product.name" message="use -Dproduct.name=... to define"/> | |||||
<antcall target="build-product"> | |||||
<param name="product.name" value="${product.name}"/> | |||||
</antcall> | |||||
</target> | |||||
<target name="ajdoc-all"> | |||||
<build-module-all module="ajdoc"/> | |||||
</target> | |||||
<target name="build"> | |||||
<build-module-all module="build"/> | |||||
</target> | |||||
<target name="aspectjtools-dist" depends="init" description="build local distribution"> | |||||
<antcall target="build-product"> | |||||
<param name="product.name" value="tools"/> | |||||
</antcall> | |||||
</target> | |||||
<!-- ===================================================================== --> | |||||
<!-- eclipse plugins --> | |||||
<!-- ===================================================================== --> | |||||
<target name="eclipse.plugins" depends="init" | |||||
description="create the Eclipse distribution plugins"> | |||||
<ant dir="${aspectj.modules.dir}/eclipse.plugin" inheritAll="false"/> | |||||
</target> | |||||
<target name="src" depends="init" description="build src modules"> | |||||
<mkdir dir="${aj.src.dir}"/> | |||||
<jar destfile="${aj.src.dir}/aspectjrt${build.version}-src.jar"> | |||||
<fileset dir="${aspectj.modules.dir}/aspectj5rt/java5-src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/runtime/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
</jar> | |||||
<unzip dest="${aj.src.dir}/bcelsrc" src="${aspectj.modules.dir}/lib/bcel/bcel-src.zip"/> | |||||
<!-- loadtime5/asm/bridge/loadtime/weaver/weaver5 --> | |||||
<jar destfile="${aj.src.dir}/aspectjweaver${build.version}-src.jar"> | |||||
<fileset dir="${aspectj.modules.dir}/aspectj5rt/java5-src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/runtime/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
<exclude name="**/*.html"/> | |||||
</fileset> | |||||
<fileset dir="${aj.src.dir}/bcelsrc"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/loadtime5/java5-src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/asm/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/bridge/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/loadtime/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/org.aspectj.matcher/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/weaver/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/weaver5/java5-src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/util/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
</jar> | |||||
<!-- missing from this are the jdtDepends.jar src files --> | |||||
<unzip dest="${aj.src.dir}/jdtsrc" src="${aspectj.modules.dir}/lib/jdtcore-aj/jdtcore-for-aspectj-src.zip"/> | |||||
<!-- ajde/ajde.core/ajdoc/asm/bridge/loadtime/org.aspectj.ajdt.core/taskdefs/util/weaver5 --> | |||||
<jar destfile="${aj.src.dir}/aspectjtools${build.version}-src.jar"> | |||||
<fileset dir="${aj.src.dir}/jdtsrc"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aj.src.dir}/bcelsrc"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/loadtime5/java5-src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/loadtime/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/ajde/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/ajde.core/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/runtime/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/aspectj5rt/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/ajdoc/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/asm/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/bridge/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/loadtime/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/org.aspectj.ajdt.core/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/taskdefs/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/util/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/weaver/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/org.aspectj.matcher/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/weaver5/java5-src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
</jar> | |||||
<delete dir="${aj.src.dir}/bcelsrc" failonerror="false"/> | |||||
<delete dir="${aj.src.dir}/jdtsrc" failonerror="false"/> | |||||
<jar destfile="${aj.src.dir}/org.aspectj.matcher-${build.version}-src.jar"> | |||||
<fileset dir="${aspectj.modules.dir}/bridge/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/util/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/org.aspectj.matcher/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<!-- | |||||
<fileset dir="${aj.src.dir}/jdtsrc"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aj.src.dir}/bcelsrc"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/loadtime5/java5-src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/loadtime/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/ajde/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/ajde.core/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/runtime/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/aspectj5rt/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/ajdoc/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/asm/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/loadtime/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/org.aspectj.ajdt.core/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/taskdefs/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/weaver/src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
<fileset dir="${aspectj.modules.dir}/weaver5/java5-src"> | |||||
<exclude name="CVS"/> | |||||
<exclude name="**/.cvsignore"/> | |||||
</fileset> | |||||
--> | |||||
</jar> | |||||
<jar destfile="${aj.src.dir}/org.aspectj-${build.version}-src.jar"> | |||||
<fileset dir="${aj.src.dir}"> | |||||
<include name="aspectjrt${build.version}-src.jar"/> | |||||
<include name="aspectjweaver${build.version}-src.jar"/> | |||||
<include name="aspectjtools${build.version}-src.jar"/> | |||||
<include name="org.aspectj.matcher-${build.version}-src.jar"/> | |||||
</fileset> | |||||
</jar> | |||||
<delete file="{aj.src.dir}/aspectjrt${build.version}-src.jar"/> | |||||
<delete file="{aj.src.dir}/aspectjweaver${build.version}-src.jar"/> | |||||
<delete file="{aj.src.dir}/aspectjtools${build.version}-src.jar"/> | |||||
<delete file="{aj.src.dir}/org.aspectj.matcher${build.version}-src.jar"/> | |||||
</target> | |||||
<target name="repo" depends="init" description="deploy maven repo"> | |||||
<property name="repo.url" value="scp://simonegianni.it/home/mavenrsync/repo"/> | |||||
<property name="repo.id" value="simonegianni-rsync"/> | |||||
<mkdir dir="${modules.dir}/aj-build/repo"/> | |||||
<copy toDir="${modules.dir}/aj-build/repo" file="aspectjtools.pom"/> | |||||
<copy toDir="${modules.dir}/aj-build/repo" file="aspectjweaver.pom"/> | |||||
<copy toDir="${modules.dir}/aj-build/repo" file="aspectjrt.pom"/> | |||||
<replaceregexp byline="true" flags="g"> | |||||
<regexp pattern="ASPECTJVERSION"/> | |||||
<substitution expression="${repo.version}"/> | |||||
<fileset dir="${modules.dir}/aj-build/repo"> | |||||
<include name="*.pom"/> | |||||
</fileset> | |||||
</replaceregexp> | |||||
<!-- Invoke maven to deploy the jars to the rsynced repo --> | |||||
<antcall target="mavenDeployJar"> | |||||
<param name="file" value="${modules.dir}/aj-build/dist/tools/lib/aspectjtools.jar"/> | |||||
<param name="artifact" value="aspectjtools"/> | |||||
<param name="desc" value="AspectJ Tools"/> | |||||
</antcall> | |||||
<antcall target="mavenDeployJar"> | |||||
<param name="file" value="${modules.dir}/aj-build/dist/tools/lib/aspectjweaver.jar"/> | |||||
<param name="artifact" value="aspectjweaver"/> | |||||
<param name="desc" value="AspectJ Weaver"/> | |||||
</antcall> | |||||
<antcall target="mavenDeployJar"> | |||||
<param name="file" value="${modules.dir}/aj-build/dist/tools/lib/aspectjrt.jar"/> | |||||
<param name="artifact" value="aspectjrt"/> | |||||
<param name="desc" value="AspectJ Runtime"/> | |||||
</antcall> | |||||
<antcall target="mavenDeploySource"> | |||||
<param name="file" value="${modules.dir}/aj-build/src/aspectjtools${build.version}-src.jar"/> | |||||
<param name="artifact" value="aspectjtools"/> | |||||
<param name="desc" value="AspectJ Tools"/> | |||||
</antcall> | |||||
<antcall target="mavenDeploySource"> | |||||
<param name="file" value="${modules.dir}/aj-build/src/aspectjweaver${build.version}-src.jar"/> | |||||
<param name="artifact" value="aspectjweaver"/> | |||||
<param name="desc" value="AspectJ Weaver"/> | |||||
</antcall> | |||||
<antcall target="mavenDeploySource"> | |||||
<param name="file" value="${modules.dir}/aj-build/src/aspectjrt${build.version}-src.jar"/> | |||||
<param name="artifact" value="aspectjrt"/> | |||||
<param name="desc" value="AspectJ Runtime"/> | |||||
</antcall> | |||||
</target> | |||||
<!-- | |||||
ant -propertyfile XXX publishtomaven | |||||
--> | |||||
<target name="publishtomaven_snapshot" depends="maven.init"> | |||||
<property name="build.root" value="/Users/aclement/gits/org.aspectj"/> | |||||
<property name="adjusted.release.type" value="snapshot"/> | |||||
<property name="maven.central.repository" value="s3://maven.springframework.org/${adjusted.release.type}"/> | |||||
<!-- | |||||
<property name="maven.central.repository" value="https://repo.spring.io/libs-snapshot-local/org/aspectj/aspectjweaver"/> | |||||
--> | |||||
<!-- aspectjtools/target/aspectjtools-1.9.8-SNAPSHOT.jar --> | |||||
<property name="bin.jars.folder" value="${build.root}/dist/tools/lib"/> | |||||
<property name="src.jars.folder" value="${build.root}/src"/> | |||||
<property name="suffix" value="1.9.8-SNAPSHOT"/> | |||||
<!-- ASPECTJRT --> | |||||
<maven:deploy file="${build.root}/aspectjrt/target/aspectjrt-${suffix}.jar"> | |||||
<remoteRepository url="${maven.central.repository}"> | |||||
<authentication username="${accessKey}" passphrase="${secretKey}"/> | |||||
</remoteRepository> | |||||
<pom file="usedForMavenUpload/aspectjrt.pom"/> | |||||
<attach file="${build.root}/aspectjrt/target/aspectjrt-${suffix}-sources.jar" classifier="sources"/> | |||||
</maven:deploy> | |||||
<!-- ASPECTJTOOLS --> | |||||
<maven:deploy file="${build.root}/aspectjtools/target/aspectjtools-${suffix}.jar"> | |||||
<remoteRepository url="${maven.central.repository}"> | |||||
<authentication username="${accessKey}" passphrase="${secretKey}"/> | |||||
</remoteRepository> | |||||
<pom file="usedForMavenUpload/aspectjtools.pom"/> | |||||
<attach file="${build.root}/aspectjtools/target/aspectjtools-${suffix}-sources.jar" classifier="sources"/> | |||||
</maven:deploy> | |||||
<!-- ASPECTJWEAVER --> | |||||
<maven:deploy file="${build.root}/aspectjweaver/target/aspectjweaver-${suffix}.jar"> | |||||
<remoteRepository url="${maven.central.repository}"> | |||||
<authentication username="${accessKey}" passphrase="${secretKey}"/> | |||||
</remoteRepository> | |||||
<pom file="usedForMavenUpload/aspectjweaver.pom"/> | |||||
<attach file="${build.root}/aspectjweaver/target/aspectjweaver-${suffix}-sources.jar" classifier="sources"/> | |||||
</maven:deploy> | |||||
<!-- ASPECTJMATCHER --> | |||||
<maven:deploy file="${build.root}/aspectjmatcher/target/aspectjmatcher-${suffix}.jar"> | |||||
<remoteRepository url="${maven.central.repository}"> | |||||
<authentication username="${accessKey}" passphrase="${secretKey}"/> | |||||
</remoteRepository> | |||||
<pom file="usedForMavenUpload/aspectjmatcher.pom"/> | |||||
<attach file="${build.root}/aspectjmatcher/target/aspectjmatcher-${suffix}-sources.jar" classifier="sources"/> | |||||
</maven:deploy> | |||||
</target> | |||||
<target name="publishtomaven_milestone" depends="maven.init"> | |||||
<property name="build.root" value="/Users/aclement/gits/org.aspectj"/> | |||||
<property name="suffix" value="1.9.8.M1"/> | |||||
<property name="adjusted.release.type" value="milestone"/> | |||||
<property name="maven.central.repository" value="s3://maven.springframework.org/${adjusted.release.type}"/> | |||||
<property name="bin.jars.folder" value="${build.root}/dist/tools/lib"/> | |||||
<property name="src.jars.folder" value="${build.root}/src"/> | |||||
<!-- ASPECTJRT --> | |||||
<maven:deploy file="${build.root}/aspectjrt/target/aspectjrt-${suffix}.jar"> | |||||
<remoteRepository url="${maven.central.repository}"> | |||||
<authentication username="${accessKey}" passphrase="${secretKey}"/> | |||||
</remoteRepository> | |||||
<pom file="usedForMavenUpload_milestone/aspectjrt.pom"/> | |||||
<attach file="${build.root}/aspectjrt/target/aspectjrt-${suffix}-sources.jar" classifier="sources"/> | |||||
</maven:deploy> | |||||
<!-- ASPECTJTOOLS --> | |||||
<maven:deploy file="${build.root}/aspectjtools/target/aspectjtools-${suffix}.jar"> | |||||
<remoteRepository url="${maven.central.repository}"> | |||||
<authentication username="${accessKey}" passphrase="${secretKey}"/> | |||||
</remoteRepository> | |||||
<pom file="usedForMavenUpload_milestone/aspectjtools.pom"/> | |||||
<attach file="${build.root}/aspectjtools/target/aspectjtools-${suffix}-sources.jar" classifier="sources"/> | |||||
</maven:deploy> | |||||
<!-- ASPECTJWEAVER --> | |||||
<maven:deploy file="${build.root}/aspectjweaver/target/aspectjweaver-${suffix}.jar"> | |||||
<remoteRepository url="${maven.central.repository}"> | |||||
<authentication username="${accessKey}" passphrase="${secretKey}"/> | |||||
</remoteRepository> | |||||
<pom file="usedForMavenUpload_milestone/aspectjweaver.pom"/> | |||||
<attach file="${build.root}/aspectjweaver/target/aspectjweaver-${suffix}-sources.jar" classifier="sources"/> | |||||
</maven:deploy> | |||||
<!-- ASPECTJMATCHER --> | |||||
<maven:deploy file="${build.root}/aspectjmatcher/target/aspectjmatcher-${suffix}.jar"> | |||||
<remoteRepository url="${maven.central.repository}"> | |||||
<authentication username="${accessKey}" passphrase="${secretKey}"/> | |||||
</remoteRepository> | |||||
<pom file="usedForMavenUpload_milestone/aspectjmatcher.pom"/> | |||||
<attach file="${build.root}/aspectjmatcher/target/aspectjmatcher-${suffix}-sources.jar" classifier="sources"/> | |||||
</maven:deploy> | |||||
</target> | |||||
<target name="publishtomaven_release" depends="maven.init"> | |||||
<property name="suffix" value="1.7.2"/> | |||||
<property name="build.root" value="/Users/aclement/gits/org.aspectj/aj-build"/> | |||||
<property name="adjusted.release.type" value="release"/> | |||||
<property name="maven.central.repository" value="s3://maven.springframework.org/${adjusted.release.type}"/> | |||||
<property name="bin.jars.folder" value="${build.root}/dist/tools/lib"/> | |||||
<property name="src.jars.folder" value="${build.root}/src"/> | |||||
<!-- ASPECTJRT --> | |||||
<maven:deploy file="${bin.jars.folder}/aspectjrt.jar"> | |||||
<remoteRepository url="${maven.central.repository}"> | |||||
<authentication username="${accessKey}" passphrase="${secretKey}"/> | |||||
</remoteRepository> | |||||
<pom file="usedForMavenUpload_${adjusted.release.type}/aspectjrt.pom"/> | |||||
<attach file="${src.jars.folder}/aspectjrt${suffix}-src.jar" classifier="sources"/> | |||||
</maven:deploy> | |||||
<!-- ASPECTJTOOLS --> | |||||
<maven:deploy file="${bin.jars.folder}/aspectjtools.jar"> | |||||
<remoteRepository url="${maven.central.repository}"> | |||||
<authentication username="${accessKey}" passphrase="${secretKey}"/> | |||||
</remoteRepository> | |||||
<pom file="usedForMavenUpload_${adjusted.release.type}/aspectjtools.pom"/> | |||||
<attach file="${src.jars.folder}/aspectjtools${suffix}-src.jar" classifier="sources"/> | |||||
</maven:deploy> | |||||
<!-- ASPECTJWEAVER --> | |||||
<maven:deploy file="${bin.jars.folder}/aspectjweaver.jar"> | |||||
<remoteRepository url="${maven.central.repository}"> | |||||
<authentication username="${accessKey}" passphrase="${secretKey}"/> | |||||
</remoteRepository> | |||||
<pom file="usedForMavenUpload_${adjusted.release.type}/aspectjweaver.pom"/> | |||||
<attach file="${src.jars.folder}/aspectjweaver${suffix}-src.jar" classifier="sources"/> | |||||
</maven:deploy> | |||||
</target> | |||||
<target name="repo2" depends="maven.init"> | |||||
</target> | |||||
<target name="mavenDeployJar"> | |||||
<!-- | |||||
Currently only an exec is usable, see http://jira.codehaus.org/browse/MANTTASKS-71 | |||||
this mean you need to have maven installed on your system. | |||||
--> | |||||
<exec executable="n:/tools/apache-maven-2.0.9/bin/mvn.bat" failonerror="true"> | |||||
<arg line="--batch-mode"/> | |||||
<arg line="deploy:deploy-file"/> | |||||
<arg line="-Durl=${repo.url}"/> | |||||
<arg line="-DrepositoryId=${repo.id}"/> | |||||
<arg line="-Dfile=${file}"/> | |||||
<arg line="-DgroupId=org.aspectj"/> | |||||
<arg line="-DartifactId=${artifact}"/> | |||||
<arg line="-Dpackaging=jar"/> | |||||
<arg line="-Dversion=${repo.version}"/> | |||||
<arg line="-DpomFile=${modules.dir}/aj-build/repo/${artifact}.pom"/> | |||||
</exec> | |||||
</target> | |||||
<target name="mavenDeploySource"> | |||||
<!-- | |||||
Currently only an exec is usable, see http://jira.codehaus.org/browse/MANTTASKS-71 | |||||
this mean you need to have maven installed on your system. | |||||
failonerror is set to false because deploy:deploy-file goes NPE for some obscure reason | |||||
on recent versions, see http://jira.codehaus.org/browse/MDEPLOY-48 | |||||
--> | |||||
<exec executable="n:/tools/apache-maven-2.0.9/bin/mvn.bat" failonerror="false"> | |||||
<arg line="--batch-mode"/> | |||||
<arg line="deploy:deploy-file"/> | |||||
<arg line="-Durl=${repo.url}"/> | |||||
<arg line="-DrepositoryId=${repo.id}"/> | |||||
<arg line="-Dfile=${file}"/> | |||||
<arg line="-DgroupId=org.aspectj"/> | |||||
<arg line="-DartifactId=${artifact}"/> | |||||
<arg line="-Dpackaging=java-source"/> | |||||
<arg line="-Dversion=${repo.version}"/> | |||||
<arg value="-DgeneratePom=false"/> | |||||
</exec> | |||||
</target> | |||||
</project> |
<?xml version="1.0" encoding="UTF-8"?> | |||||
<ivysettings> | |||||
<settings defaultResolver="external-lookup" defaultLatestStrategy="latest-lexico"/> | |||||
<caches resolutionCacheDir="${ivy.cache.dir}/resolution" repositoryCacheDir="${ivy.cache.dir}/repository" | |||||
ivyPattern="[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" | |||||
artifactPattern="[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" | |||||
useOrigin="true" checkUpToDate="false"/> | |||||
<!-- | |||||
<typedef name="s3" classname="org.springframework.aws.ivy.S3Resolver"/> | |||||
<macrodef name="s3repo"> | |||||
<attribute name="bucket"/> | |||||
<attribute name="artifact.type"/> | |||||
<attribute name="release.type"/> | |||||
<s3 descriptor="required" accessKey="${accessKey}" secretKey="${secretKey}"> | |||||
<ivy pattern="s3://@{bucket}/ivy/@{artifact.type}/@{release.type}/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/> | |||||
<artifact pattern="s3://@{bucket}/ivy/@{artifact.type}/@{release.type}/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/> | |||||
</s3> | |||||
</macrodef> | |||||
--> | |||||
<!-- | |||||
<macrodef name="localrepo"> | |||||
<filesystem descriptor="required"> | |||||
<ivy pattern="${local.repo.dir}/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/> | |||||
<artifact pattern="${local.repo.dir}/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/> | |||||
</filesystem> | |||||
</macrodef> | |||||
--> | |||||
<resolvers> | |||||
<!-- Integration repositories --> | |||||
<!-- | |||||
<filesystem name="integration" descriptor="required"> | |||||
<ivy pattern="${integration.repo.dir}/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/> | |||||
<artifact pattern="${integration.repo.dir}/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/> | |||||
</filesystem> | |||||
--> | |||||
<!-- Lookup repositories --> | |||||
<chain name="external-lookup" returnFirst="true"> | |||||
<localrepo name="local-external-repository"/> | |||||
<s3repo name="bundle-external-repository" bucket="repository.springsource.com" artifact.type="bundles" release.type="external"/> | |||||
<s3repo name="library-external-repository" bucket="repository.springsource.com" artifact.type="libraries" release.type="external"/> | |||||
</chain> | |||||
<chain name="spring-portfolio-lookup" returnFirst="true"> | |||||
<resolver ref="integration"/> | |||||
<localrepo name="local"/> | |||||
<s3repo name="bundle-release-repository" bucket="repository.springsource.com" artifact.type="bundles" release.type="release"/> | |||||
<s3repo name="bundle-milestone-repository" bucket="repository.springsource.com" artifact.type="bundles" release.type="milestone"/> | |||||
<s3repo name="bundle-snapshot-repository" bucket="repository.springsource.com" artifact.type="bundles" release.type="snapshot"/> | |||||
<s3repo name="library-release-repository" bucket="repository.springsource.com" artifact.type="libraries" release.type="release"/> | |||||
<s3repo name="library-milestone-repository" bucket="repository.springsource.com" artifact.type="libraries" release.type="milestone"/> | |||||
<s3repo name="library-snapshot-repository" bucket="repository.springsource.com" artifact.type="libraries" release.type="snapshot"/> | |||||
</chain> | |||||
<!-- Publishing repositories --> | |||||
<s3repo name="ebr-bundle-publish" bucket="${publish.bucket}" artifact.type="bundles" release.type="${adjusted.release.type}"/> | |||||
<s3repo name="ebr-library-publish" bucket="${publish.bucket}" artifact.type="libraries" release.type="${adjusted.release.type}"/> | |||||
<localrepo name="local-bundle-publish"/> | |||||
<localrepo name="local-library-publish"/> | |||||
</resolvers> | |||||
<modules> | |||||
<module organisation="org.springframework.*" name="*" resolver="spring-portfolio-lookup"/> | |||||
<module organisation="com.springsource.*" name="*" resolver="spring-portfolio-lookup"/> | |||||
</modules> | |||||
</ivysettings> |
<?xml version="1.0" ?> | |||||
<!-- writen for Ant 1.5.1 --> | |||||
<project name="Packaging AJ for AJDT" default="ajdtjars"> | |||||
<description>Takes an AJ build and spits out the jars for AJDT</description> | |||||
<property name="pkg.working.dir" value="../aj-build/ajdttemp" /> | |||||
<property name="aspectj.lib.dir" value="../aj-build/dist/tools/lib"/> | |||||
<property name="ajdt.output.dir" value="../aj-build/ajdtoutput"/> | |||||
<target name="ajdtjars" depends="ajdejar,weaverjar,runtimejar" | |||||
description="Run in the build folder, it will take the aj-build/ output and create AJDT jars"> | |||||
</target> | |||||
<target name="ajdejar" description="Construct ajde.jar and ajdesrc.zip for the ajde plugin using an AJ build"> | |||||
<!-- copy and unpack an aspectjtools.jar --> | |||||
<delete dir="${pkg.working.dir}"/> | |||||
<copy file="${aspectj.lib.dir}/aspectjtools.jar" tofile="aspectjtools.jar" overwrite="true" /> | |||||
<mkdir dir="${pkg.working.dir}" /> | |||||
<unzip dest="${pkg.working.dir}" src="aspectjtools.jar" /> | |||||
<delete file="aspectjtools.jar"/> | |||||
<!-- delete everything that isn't in the org.aspectj package --> | |||||
<delete includeemptydirs="true"> | |||||
<fileset dir="${pkg.working.dir}"> | |||||
<exclude name="org/aspectj/**/*.*" /> | |||||
</fileset> | |||||
</delete> | |||||
<!-- delete everything which is going to be in aspectjweaver.jar --> | |||||
<echo message="Removing files not required in ajde.jar since they're contained in aspectjweaver.jar"/> | |||||
<delete includeemptydirs="true"> | |||||
<fileset dir="${pkg.working.dir}"> | |||||
<include name="org/aspectj/asm/**/*.*" /> | |||||
<include name="org/aspectj/weaver/**/*.*" /> | |||||
<include name="org/aspectj/apache/bcel/**/*.*" /> | |||||
<include name="org/aspectj/bridge/**/*.*" /> | |||||
<include name="org/aspectj/util/**/*.*" /> | |||||
</fileset> | |||||
</delete> | |||||
<!-- delete everything which is going to be in aspectjrt.jar --> | |||||
<echo message="Removing files not required in ajde.jar since they're contained in aspectjrt.jar"/> | |||||
<delete includeemptydirs="true"> | |||||
<fileset dir="${pkg.working.dir}"> | |||||
<!-- bug 118235: currently the commented out classes appear in both ajde.jar and aspectjrt.jar | |||||
uncomment this if decide it should only live in aspectjrt.jar | |||||
<include name="org/aspectj/internal/lang/annotation/**/*.*" /> | |||||
<include name="org/aspectj/internal/lang/reflect/**/*.*" /> --> | |||||
<include name="org/aspectj/runtime/**/*.*" /> | |||||
<include name="org/aspectj/lang/**/*.*" /> | |||||
</fileset> | |||||
</delete> | |||||
<!-- construct the ajde.jar --> | |||||
<zip destfile="ajde.jar"> | |||||
<fileset dir="${pkg.working.dir}" /> | |||||
</zip> | |||||
<delete dir="${pkg.working.dir}" /> | |||||
<!-- build a src zip --> | |||||
<unzip dest="${pkg.working.dir}" src="${aspectj.lib.dir}/../../ide/eclipse/org.aspectj.ajde.source/src/jdtcore-for-aspectj-src.zip"/> | |||||
<unzip dest="${pkg.working.dir}" src="${aspectj.lib.dir}/../../ide/eclipse/org.aspectj.ajde.source/src/aspectjsrc.zip"/> | |||||
<!-- delete everything that isn't in the org.aspectj package --> | |||||
<delete includeemptydirs="true"> | |||||
<fileset dir="${pkg.working.dir}"> | |||||
<exclude name="org/aspectj/**/*.*"/> | |||||
</fileset> | |||||
</delete> | |||||
<!-- delete everything which is going to be in aspectjweaversrc.zip --> | |||||
<echo message="Removing files not required in ajdesrc.zip since they're contained in aspectjweaversrc.zip"/> | |||||
<delete includeemptydirs="true"> | |||||
<fileset dir="${pkg.working.dir}"> | |||||
<include name="org/aspectj/asm/**/*.*" /> | |||||
<include name="org/aspectj/weaver/**/*.*" /> | |||||
<include name="org/aspectj/apache/bcel/**/*.*" /> | |||||
<include name="org/aspectj/bridge/**/*.*" /> | |||||
<include name="org/aspectj/util/**/*.*" /> | |||||
</fileset> | |||||
</delete> | |||||
<!-- delete everything which is going to be in aspectjrtsrc.zip --> | |||||
<echo message="Removing files not required in ajdesrc.zip since they're contained in aspectjrtsrc.zip"/> | |||||
<delete includeemptydirs="true"> | |||||
<fileset dir="${pkg.working.dir}"> | |||||
<!-- bug 118235: currently the commented out classes appear in both ajde.jar and aspectjrt.jar | |||||
uncomment this if decide it should only live in aspectjrt.jar | |||||
<include name="org/aspectj/internal/lang/annotation/**/*.*" /> | |||||
<include name="org/aspectj/internal/lang/reflect/**/*.*" /> --> | |||||
<include name="org/aspectj/runtime/**/*.*" /> | |||||
<include name="org/aspectj/lang/**/*.*" /> | |||||
</fileset> | |||||
</delete> | |||||
<zip destfile="ajdesrc.zip"> | |||||
<fileset dir="${pkg.working.dir}"/> | |||||
</zip> | |||||
<delete dir="${pkg.working.dir}" /> | |||||
<copy file="ajde.jar" todir="${ajdt.output.dir}"/> | |||||
<copy file="ajdesrc.zip" todir="${ajdt.output.dir}"/> | |||||
<delete file="ajde.jar"/> | |||||
<delete file="ajdesrc.zip"/> | |||||
</target> | |||||
<target name="weaverjar" description="Construct aspectjweaver.jar and aspectjweaversrc.zip for the aspectjweaver plugin using an AJ build"> | |||||
<!-- copy and unpack an aspectjweaver.jar into a local build directory --> | |||||
<delete dir="${pkg.working.dir}"/> | |||||
<copy file="${aspectj.lib.dir}/aspectjweaver.jar" tofile="aspectjweaver.jar" overwrite="true" /> | |||||
<mkdir dir="${pkg.working.dir}" /> | |||||
<unzip dest="${pkg.working.dir}" src="aspectjweaver.jar" /> | |||||
<delete file="aspectjweaver.jar"/> | |||||
<!-- delete everything which shouldn't be included in the aspectjweaver.jar --> | |||||
<echo message="Removing files not required in aspectjweaver.jar"/> | |||||
<delete includeemptydirs="true"> | |||||
<fileset dir="${pkg.working.dir}"> | |||||
<exclude name="META-INF/*.*" /> | |||||
<exclude name="org/aspectj/apache/bcel/**/*.*" /> | |||||
<exclude name="org/aspectj/asm/**/*.*" /> | |||||
<exclude name="org/aspectj/bridge/**/*.*" /> | |||||
<exclude name="org/aspectj/util/**/*.*" /> | |||||
<exclude name="org/aspectj/weaver/**/*.*" /> | |||||
<exclude name="org/aspectj/org/objectweb/asm/**/*.*"/> | |||||
</fileset> | |||||
</delete> | |||||
<!-- construct the aspectjweaver.jar directly in the org.aspectj.weaver plugin --> | |||||
<zip destfile="aspectjweaver.jar"> | |||||
<fileset dir="${pkg.working.dir}" /> | |||||
</zip> | |||||
<delete dir="${pkg.working.dir}" /> | |||||
<!-- build a src zip --> | |||||
<unzip dest="${pkg.working.dir}" src="${aspectj.lib.dir}/../../ide/eclipse/org.aspectj.ajde.source/src/jdtcore-for-aspectj-src.zip"/> | |||||
<unzip dest="${pkg.working.dir}" src="${aspectj.lib.dir}/../../ide/eclipse/org.aspectj.ajde.source/src/aspectjsrc.zip"/> | |||||
<!-- delete everything that isn't in the org.aspectj package --> | |||||
<delete includeemptydirs="true"> | |||||
<fileset dir="${pkg.working.dir}"> | |||||
<exclude name="org/aspectj/**/*.*"/> | |||||
</fileset> | |||||
</delete> | |||||
<!-- delete everything which shouldn't be included in the aspectjweaversrc.zip --> | |||||
<echo message="Removing files not required in aspectjweaversrc.zip"/> | |||||
<delete includeemptydirs="true"> | |||||
<fileset dir="${pkg.working.dir}"> | |||||
<exclude name="org/aspectj/apache/bcel/**/*.*" /> | |||||
<exclude name="org/aspectj/asm/**/*.*" /> | |||||
<exclude name="org/aspectj/bridge/**/*.*" /> | |||||
<exclude name="org/aspectj/util/**/*.*" /> | |||||
<exclude name="org/aspectj/weaver/**/*.*" /> | |||||
</fileset> | |||||
</delete> | |||||
<zip destfile="aspectjweaversrc.zip"> | |||||
<fileset dir="${pkg.working.dir}"/> | |||||
</zip> | |||||
<delete dir="${pkg.working.dir}" /> | |||||
<copy file="aspectjweaver.jar" todir="${ajdt.output.dir}"/> | |||||
<copy file="aspectjweaversrc.zip" todir="${ajdt.output.dir}"/> | |||||
<delete file="aspectjweaver.jar"/> | |||||
<delete file="aspectjweaversrc.zip"/> | |||||
</target> | |||||
<target name="runtimejar" description="Copy the aspectjrt.jar from an | |||||
AJ build into the runtime plugin containing | |||||
the src"> | |||||
<copy file="${aspectj.lib.dir}/aspectjrt.jar" | |||||
tofile="aspectjrt.jar" | |||||
overwrite="true" /> | |||||
<delete dir="${pkg.working.dir}" /> | |||||
<!-- build a src zip --> | |||||
<unzip dest="${pkg.working.dir}" src="${aspectj.lib.dir}/../../ide/eclipse/org.aspectj.ajde.source/src/jdtcore-for-aspectj-src.zip"/> | |||||
<unzip dest="${pkg.working.dir}" src="${aspectj.lib.dir}/../../ide/eclipse/org.aspectj.ajde.source/src/aspectjsrc.zip"/> | |||||
<!-- delete everything which shouldn't be included in the aspectjrtsrc.zip --> | |||||
<echo message="Removing files not required in aspectjrtsrc.zip"/> | |||||
<delete includeemptydirs="true"> | |||||
<fileset dir="${pkg.working.dir}"> | |||||
<exclude name="org/aspectj/internal/lang/annotation/**/*.*" /> | |||||
<exclude name="org/aspectj/internal/lang/reflect/**/*.*" /> | |||||
<exclude name="org/aspectj/runtime/**/*.*" /> | |||||
<exclude name="org/aspectj/lang/**/*.*" /> | |||||
</fileset> | |||||
</delete> | |||||
<zip destfile="aspectjrtsrc.zip"> | |||||
<fileset dir="${pkg.working.dir}"/> | |||||
</zip> | |||||
<delete dir="${pkg.working.dir}" /> | |||||
<copy file="aspectjrt.jar" todir="${ajdt.output.dir}"/> | |||||
<copy file="aspectjrtsrc.zip" todir="${ajdt.output.dir}"/> | |||||
<delete file="aspectjrt.jar"/> | |||||
<delete file="aspectjrtsrc.zip"/> | |||||
</target> | |||||
<!-- VERSION-STRING --> | |||||
<!-- these property values will be overridden when called from the master build script --> | |||||
<property name="ajde.version" value="9.9.9" /> | |||||
<property name="build.dir" value="build" /> | |||||
<property file="aspectjlib.properties" /> | |||||
<target name="init"> | |||||
<mkdir dir="${build.dir}" /> | |||||
<mkdir dir="dist" /> | |||||
</target> | |||||
<target name="clean" depends="init"> | |||||
<delete dir="${build.dir}" /> | |||||
<delete dir="dist" /> | |||||
</target> | |||||
<!--target name="packaged-plugin" depends="init" description="Create the plugin jar file from the assembled components in the build dir"> | |||||
<copy todir="${build.dir}" includeemptydirs="false"> | |||||
<fileset dir="."> | |||||
<exclude name="*src.zip" /> | |||||
<exclude name="build.*" /> | |||||
<exclude name=".*" /> | |||||
<exclude name="*/*" /> | |||||
<exclude name="META-INF/MANIFEST.MF" /> | |||||
<exclude name="aspectjlib.properties" /> | |||||
<depth max="0" /> | |||||
</fileset> | |||||
</copy> | |||||
<copy file="META-INF/MANIFEST.MF" tofile="${build.dir}/META-INF/MANIFEST.MF"> | |||||
<filterset begintoken="9" endtoken="9"> | |||||
<filter token="2.2.2" value="${ajde.version}"/> | |||||
</filterset> | |||||
</copy> | |||||
<copy todir="${build.dir}/doc"> | |||||
<fileset dir="doc" /> | |||||
</copy> | |||||
<copy todir="${build.dir}/icons"> | |||||
<fileset dir="icons" /> | |||||
</copy> | |||||
<zip destfile="dist/org.aspectj.ajde_${ajde.version}.jar"> | |||||
<fileset dir="build" /> | |||||
</zip> | |||||
</target--> | |||||
<target name="copy doc" description="This copies the aspectj docs into the org.eclipse.ajde | |||||
plugin. By default, it only copies over any changes from the current version"> | |||||
<copy todir="doc" failonerror="false"> | |||||
<fileset dir="${aspectj.doc.dir}"> | |||||
<exclude name="examples" /> | |||||
</fileset> | |||||
</copy> | |||||
</target> | |||||
</project> |
<html> | |||||
<head> | |||||
<title>Build and Test AspectJ</title> | |||||
</head> | |||||
<body> | |||||
<h1>Build and Test AspectJ</h1> | |||||
This describes how to build and test AspectJ | |||||
for developers working on source code for AspectJ. | |||||
It covers building with Ant or Eclipse and testing with | |||||
JUnit and the harness used for compiler tests. | |||||
For information on how the build works and how to | |||||
debug failed builds, see | |||||
<a href="readme-build-module.html"> | |||||
readme-build-module.html</a>. | |||||
<ol> | |||||
<li>Quick start</li> | |||||
<li>Requirements</li> | |||||
<li>Standard builds | |||||
<ol> | |||||
<li>Building using Ant</li> | |||||
<li>Building with Eclipse</li> | |||||
<li>Running the Ant build scripts from Eclipse</li> | |||||
<li>Using Eclipse to compile but Ant to assemble</li> | |||||
</ol> | |||||
</li> | |||||
<li>Running build products | |||||
<ol> | |||||
<li>Running the compiler, browser, or harness from the command-line</li> | |||||
<li>Running the compiler, browser, or harness from Eclipse</li> | |||||
<li>Running Ant-built jars from Eclipse</li> | |||||
</ol> | |||||
</li> | |||||
<li>Testing AspectJ | |||||
<ol> | |||||
<li>Running JUnit tests in Eclipse</li> | |||||
<li>Running JUnit tests from the command-line without Eclipse</li> | |||||
<li>Running JUnit tests from Ant without Eclipse</li> | |||||
<li>Using the test harness to run compiler tests</li> | |||||
</ol> | |||||
</li> | |||||
<li>Releases | |||||
<ol> | |||||
<li>Release builds</li> | |||||
<li>Release preconditions and testing</li> | |||||
<li>Release completion</li> | |||||
</ol> | |||||
</li> | |||||
<li>New modules, Java 5, and Ant-only build problems</li> | |||||
<li>Build Problems</li> | |||||
</ol> | |||||
<h3>Quick start</h3> | |||||
This is a minimal introduction to building and testing AspectJ. | |||||
<p/>Command-line users use CVS to check out something like this: | |||||
<pre> | |||||
export CVS_ROOT=":pserver:anonymous@dev.eclipse.org:/home/technology" | |||||
cvs co org.aspectj/modules</pre> | |||||
If using Eclipse, check out the subdirectories of | |||||
<code>org.aspectj/modules</code> as Eclipse projects. | |||||
Skip the <code>aspectj-attic</code> module. | |||||
<p/>Build an AspectJ distribution: | |||||
<pre> | |||||
cd org.aspectj/modules/build | |||||
../lib/ant/bin/ant</pre> | |||||
Install the distribution (e.g., into build/../aspectj-install): | |||||
<pre> java -jar ../aj-build/dist/aspectj-DEVELOPMENT.jar</pre> | |||||
You can skip the GUI by specifying an existing, empty writable | |||||
target directory using <code>-to {targDir}</code>: | |||||
<pre> java -jar ../aj-build/dist/aspectj-DEVELOPMENT.jar -to .</pre> | |||||
Test it by running the build script in the examples directory: | |||||
<pre> cd ../aspectj-install/doc/examples | |||||
../../lib/ant/bin/ant</pre> | |||||
This should build and run the spacewar example. | |||||
<h3>Required sources, libraries, and tools</h3> | |||||
<p> | |||||
To build requires only the AspectJ project modules and Java VM's. | |||||
All necessary libraries and tools are in the | |||||
<a href="../lib/">lib</a> directory, including Ant. | |||||
</p> | |||||
<p>To get the source, check out from CVS. E.g., from the command line, | |||||
</p> | |||||
<pre> | |||||
export CVS_ROOT=":pserver:anonymous@dev.eclipse.org:/home/technology" | |||||
cvs co org.aspectj/modules | |||||
</pre> | |||||
<p> | |||||
Eclipse users should check out each relevant subdirectory of | |||||
<code>org.aspectj/modules</code> as a project | |||||
(most have .project files). | |||||
</p> | |||||
<p> | |||||
Not all modules are required. | |||||
The <code>aspectj-attic</code> module only has old code. | |||||
</p> | |||||
<h3>Standard builds</h3> | |||||
<h4>Overview</h4> | |||||
The build system is designed to work standalone and support | |||||
Eclipse and Ant. | |||||
Each module is an Eclipse project, and all required libraries | |||||
are in lib/. | |||||
All build dependencies are read from Eclipse .classpath files | |||||
and managed using an Ant builder task, | |||||
so no Ant build scripts need to change when dependencies change. | |||||
However, that means the modules (read: Eclipse projects) can only | |||||
do what the builder task understands. Currently it expects | |||||
release source files in <code>src</code> (or <code>java5-src</code> | |||||
for Java 5 code) and test source files in | |||||
<code>testsrc</code> (or <code>java5-testsrc</code>), | |||||
and can handle Java and AspectJ projects. | |||||
For more information on the build infrastructure and setup, see | |||||
<a href="readme-build-module.html">readme-build-module.html</a> | |||||
and <a href="#antInvariants">below</a>. | |||||
<h4>Building using Ant</h4> | |||||
<p> | |||||
You should use the Ant in ../lib/ant. Currently this is a vanilla | |||||
distribution of Ant 1.6.3, but that might change. | |||||
</p> | |||||
<p> | |||||
This <a href=".">build</a> directory has a master | |||||
<a href="build.xml">build.xml</a> script, and the modules have | |||||
satellite <code>build.xml</code> which support building only that | |||||
module. | |||||
The <a href="release">release</a> directory has scripts for doing | |||||
release builds (in multiple VM's, with testing). These are run by | |||||
automated build and before any AspectJ distribution. | |||||
Custom <code>build.xml</code> files are in | |||||
The <a href="../docs/build.xml">../docs/build.xml</a>, | |||||
<a href="../org.aspectj.lib/build-aspectjlib.xml">org.aspectj.lib/build-aspectjlib.xml</a>, | |||||
and <a href="../eclipse.plugin/build.xml">../eclipse.plugin/build.xml</a>. | |||||
These are invoked by the master | |||||
<a href="build.xml">build.xml</a> as needed. | |||||
Other modules have generic <code>build.xml</code>'s that just | |||||
use the master build file to run targets <code>compile</code> and | |||||
<code>test</code> for that module. | |||||
(If you do <code>clean</code>, all binaries for all | |||||
modules are cleaned.) | |||||
</p> | |||||
<p> | |||||
The master <a href="build.xml">build.xml</a> | |||||
creates an AspectJ distribution in | |||||
<a href="../aj-build/dist/aspectj-DEVELOPMENT.jar"> | |||||
../aj-build/dist/aspectj-DEVELOPMENT.jar | |||||
</a>; | |||||
You'll notice module jar results are put in | |||||
<a href="../aj-build/jars">../aj-build/jars</a>, | |||||
including <code>{module}.jar</code> and <code>{module}-test.jar</code> | |||||
(for the release and test classes) and | |||||
<code>{module}-all.jar</code>, and | |||||
<code>{module}-test-all.jar</code> | |||||
(including all antecedant classes and libraries). | |||||
See <a href="build.xml">build.xml</a> for other targets. | |||||
</p> | |||||
<p> | |||||
For any build, you should create your own version of | |||||
<a href="local.properties">local.properties</a>, using | |||||
<a href="sample.local.properties">sample.local.properties</a> | |||||
as a template. | |||||
When using the master <code>build.xml</code>, | |||||
consider defining "build.config" to pass flags to the Ant | |||||
builder. E.g., to reuse Eclipse classes and log verbosely, | |||||
<p/> | |||||
<pre> | |||||
ant -Dbuild.config=useEclipseCompiles,verbose | |||||
</pre> | |||||
<p> | |||||
(<code>useEclipseCompiles</code> is incompatible with release builds | |||||
since it mixes testing and release classes.) | |||||
<p/> | |||||
<h4>Example builds</h4> | |||||
<p> | |||||
For example, to build everything into a release bundle, | |||||
with verbose logging: | |||||
</p> | |||||
<pre> | |||||
cd modules/build | |||||
../lib/ant/bin/ant | |||||
</pre> | |||||
<p> | |||||
To build only the asm module (and any modules it requires) using | |||||
<code>modules/build</code>: | |||||
</p> | |||||
<pre> | |||||
cd modules/build | |||||
../lib/ant/bin/ant -f build.xml any-module -Dmodule.name=asm | |||||
</pre> | |||||
<p> | |||||
To build and test the asm module from that module: | |||||
</p> | |||||
<pre> | |||||
cd modules/asm | |||||
../lib/ant/bin/ant test | |||||
</pre> | |||||
<p> | |||||
To build the test harness into | |||||
<code>../aj-build/jars/testing-drivers-all.jar</code>: | |||||
</p> | |||||
<pre> | |||||
cd modules/build | |||||
../lib/ant/bin/ant build-harness-jar | |||||
</pre> | |||||
<h4>Building with Eclipse</h4> | |||||
<p> | |||||
As mentioned above, the modules are Eclipse projects, so | |||||
once checked out, they should build as-is. | |||||
(You will need to be using a version of Eclipse that can | |||||
handle the .project and .classpath files in the modules/projects.) | |||||
That will enable you | |||||
to run the compiler or test harness from within Eclipse (see below), | |||||
but it will not build the AspectJ release as Ant does. | |||||
If you are making changes in Eclipse, you should set your default JRE | |||||
to the minimum supported by the AspectJ tools (currently JDK 1.3) | |||||
to avoid using later API's. | |||||
You'll need to set some variables in your Eclipse environment; | |||||
currently these are: | |||||
</p> | |||||
<ul> | |||||
<li><u>JAVA_HOME</u>: used to access <code>JAVA_HOME/lib/tools.jar</code> | |||||
</li> | |||||
<li><u>JRE15_LIB</u>: used to access Java 5 libraries. | |||||
Some modules/projects use Java 5 API's. These have | |||||
per-project compiler settings for 5.0 compliance, but cannot | |||||
be built with the default pre-1.5 VM libraries. | |||||
Until the minimum VM required by the tools is 1.5, | |||||
we'll need to define this variable. | |||||
</li> | |||||
</ul> | |||||
<h4>Running the Ant build scripts from Eclipse</h4> | |||||
When running Ant from older versions of Eclipse, | |||||
be sure to replace the Eclipse Ant | |||||
libraries with ours. In the Ant configuration, remove all jars | |||||
specified by Eclipse and add all the libraries in | |||||
<a href="../lib/ant/lib">../lib/ant/lib</a> | |||||
as well as in <a href="../lib/junit">../lib/junit</a>. | |||||
(Do not add <code>../lib/build/build.jar</code>, which is | |||||
added via a taskdef declaration.) | |||||
<p/> | |||||
If you find on rebuilding that the build products are not | |||||
being regenerated, you may need to manually delete them | |||||
or restart eclipse (the files are not being closed); see | |||||
<a href="readme-build-module.html">readme-build-module.html</a> | |||||
for more information. | |||||
<h4>Using Eclipse to compile but Ant to assemble</h4> | |||||
As mentioned above, | |||||
assuming Eclipse is compiling the AspectJ modules successfully, | |||||
you can use Ant to assemble the Eclipse-built .class files into a | |||||
product by including <code>useEclipseCompiles</code> in the | |||||
<code>build.config</code>. That reduces the build process | |||||
to product assembly. | |||||
(And of course you can run Ant from Eclipse as described above.) | |||||
<h4>Running the compiler, browser, or harness from the command-line</h4> | |||||
The build produces jar files in | |||||
<a href="../aj-build/jars/">../aj-build/jars/</a>, | |||||
some of which have manifests specifying the main class, so they | |||||
can be run using <code>java -jar {file} {arguments}</code>. | |||||
<p/>To run the compiler from the command-line, use the <code>ajbrowser</code> jar file: | |||||
<pre> | |||||
java -jar aj-build/jars/ajbrowser-all.jar {compile arguments} | |||||
</pre> | |||||
This will run <code>ajbrowser</code> if you provide no arguments or | |||||
only (unflagged) .lst file arguments. To run the test harness, | |||||
use the <code>testing-drivers</code> jar file: | |||||
<pre> | |||||
java -jar aj-build/jars/testing-drivers-all.jar tests/ajcTests.xml ... | |||||
</pre> | |||||
<h4>Running the compiler, browser, or harness from Eclipse</h4> | |||||
To run things within Eclipse, create a run configuration from the | |||||
defining module using the main class: | |||||
<p/> | |||||
<table border="1" cellpadding="1"> | |||||
<tr><th>Program</th><th>Module</th><th>Main</th></tr> | |||||
<tr><td>AspectJ compiler</td><td>org.aspectj.ajdt.core</td><td>org.aspectj.tools.ajc.Main</td></tr> | |||||
<tr><td>AspectJ browser</td><td>ajbrowser</td><td>org.aspectj.tools.ajbrowser.Main</td></tr> | |||||
<tr><td>Test harness</td><td>testing-drivers</td><td>org.aspectj.testing.drivers.Harness</td></tr> | |||||
</table> | |||||
<h4>Running Ant-built jars from Eclipse</h4> | |||||
You can run build products (built jars) from Eclipse in two ways: | |||||
<ul> | |||||
<li>Put them on the classpath of some run configuration</li> | |||||
<li>Select the jar files and right-click to "open with default editor" | |||||
(assuming your system is configured to run .jar files)</li> | |||||
</ul> | |||||
You might do this to run the installer or test the browser as built. | |||||
However, doing so might prevent those jar files from being recreated | |||||
in the next build. | |||||
It appears that sometimes these jar files are not close during the | |||||
Eclipse session, which means they cannot be overwritten in new builds, | |||||
even those run from a different Ant process. | |||||
If you find that builds are silently failing, try deleting the | |||||
build products. | |||||
<h3>Testing AspectJ</h3> | |||||
<p> | |||||
Each module has a tree of JUnit tests in the <code>testsrc</code> directory. | |||||
These parallel the <code>src</code> directories and contain roll-up suites | |||||
for each package | |||||
(<code>{module}/testsrc/{packagePath}/{package}Tests.java</code>) and | |||||
for the module as a whole | |||||
(<code>{module}/testsrc/{module}ModuleTests.java</code>). | |||||
</p> | |||||
<p> | |||||
The AspectJ project also has <i>additional</i> custom tests in the | |||||
<a href="../tests">tests module</a>, | |||||
mainly the compiler tests run by the harness in | |||||
<a href="../tests/ajcTests.xml">ajcTests.xml</a>. <u>It is important | |||||
to run these additional compiler tests (not covered by the JUnit | |||||
suite) before and after any change to the compiler.</u> | |||||
</p> | |||||
<p> | |||||
The module <a href="../run-all-junit-tests">run-all-junit-tests</a> | |||||
refers to all the other modules and the compiler tests adapted through | |||||
the <a href="../tests/src">../tests/src</a>. So the easiest way to | |||||
run the JUnit and compiler tests is to run the top-level suite | |||||
<a href="../run-all-junit-tests/testsrc/RunTheseBeforeYouCommitTests.java"> | |||||
RunTheseBeforeYouCommitTests</a>. | |||||
</p> | |||||
<h4>Running JUnit tests in Eclipse</h4> | |||||
JUnit tests may be run under eclipse by selecting any JUnit source file | |||||
and creating a run configuration for it, including the roll-up | |||||
root test | |||||
<a href="../run-all-junit-tests/testsrc/RunTheseBeforeYouCommitTests.java"> | |||||
RunTheseBeforeYouCommitTests</a>. | |||||
<h4>Running JUnit tests in Ant from the command line</h4> | |||||
To run the JUnit tests for any module, just go there and | |||||
<pre>../lib/ant/bin/ant tests</pre>. | |||||
<h4>Running JUnit tests from the command-line without Eclipse or Ant</h4> | |||||
<p> | |||||
To run JUnit directly, put JUnit and the {module}-test-all.jar file | |||||
on the classpath: | |||||
</p> | |||||
<pre> | |||||
set cp="lib/junit/junit.jar;aj-build/jars/util-test-all.jar" | |||||
java -classpath "$cp" junit.textui.TestRunner UtilModuleTests | |||||
</pre> | |||||
<p> | |||||
The assembled (<code>-all</code>) jar files include all antecedants, | |||||
except for those "skipped" (like Ant and JUnit). | |||||
(For more on skipped libraries, see | |||||
<a href="readme-build-module.html">readme-build-module.html</a>). | |||||
</p> | |||||
<h4>Using the test harness to run compiler tests</h4> | |||||
<p> | |||||
The <a href="build.xml">build.xml</a> <code>build-harness-jar</code> | |||||
target builds a single jar with | |||||
the AspectJ binaries and a test harness as the main class. | |||||
It reads test suite files like | |||||
<a href="../tests/ajcTests.xml">../tests/ajcTests.xml</a>; | |||||
use the -help flag to see available options. | |||||
For more information, see | |||||
<a href="../tests/readme-tests-module.html"> | |||||
../tests/readme-tests-module.html</a>. | |||||
</p> | |||||
<hr/> | |||||
<h3><a name="releases"></a>Releases</h3> | |||||
<h4>Release builds</h4> | |||||
Committers do official release builds to create the distribution | |||||
released in binary form from the web site. | |||||
Release builds differ mainly in running | |||||
from a clean, up-to-date tree and with correct build version values | |||||
in <a href="local.properties">local.properties</a>, which | |||||
will update <code>org.aspectj.bridge.Version</code>. | |||||
Do not run using the <code>build.config</code> value | |||||
<code>useEclipseCompiles</code>, | |||||
because this will include testing classes in the release libraries. | |||||
See <a href="#version">Version synchronization</a> below | |||||
for more details on how the version is updated. | |||||
<h4>Release preconditions and testing</h4> | |||||
<p/> | |||||
Normally, we do releases only after fixing all high-priority | |||||
(P1 and P2) bugs in the bug database | |||||
(<a href="https://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&priority=P1&priority=P2"> | |||||
All open AspectJ bugs with P1 and P2</a>). | |||||
For bug fixes, associated tests in | |||||
<code>tests/ajcTestsFailing.xml</code> are fixed and moved to | |||||
<code>tests/ajcTests.xml</code>. | |||||
<p/>Before a release, run the release tests as described in | |||||
<a href="../tests/readme-release-tests.html"> | |||||
../tests/readme-release-tests.html</a> | |||||
(deprecated? using: | |||||
<a href="../build/release-checklist.txt"> | |||||
../build/release-checklist.txt</a>). | |||||
<h4>Release completion</h4> | |||||
When the release build is accepted, | |||||
tag the tree with the release version | |||||
so others can do diffs or create patches | |||||
based on the release code. E.g., from the command line: | |||||
<pre> | |||||
cd org.aspectj/ | |||||
cvs tag -R -c v1_1_0 | |||||
</pre> | |||||
<p/> | |||||
Pushing the release out to the web involves manually updating | |||||
the web with the release files and documentation, | |||||
verifying the downloads and pages, | |||||
and sending any release notifications. | |||||
Save the release installer, test results, and any notes | |||||
about deferred bugs or tests in | |||||
<code>org.aspectj/releases/aspectj-{version}/</code>. | |||||
<p/> | |||||
<hr/> | |||||
<a name="antInvariants"/> | |||||
<h3>New modules, Java 5, and Ant-only build problems</h3> | |||||
<p> | |||||
To reiterate (and as described more fully in | |||||
<a href="readme-build-module.html">readme-build-module.html</a>), | |||||
the build system introspects on module and the .classpath file | |||||
to determine how to build. Further, it enforces stricter build | |||||
invariants than the Eclipse projects do; when your code works | |||||
in Eclipse but fails in the Ant, it's your responsibility to fix it | |||||
by following the build invariants below. | |||||
</p> | |||||
<p> | |||||
<p>What to do when adding a new module (i.e., eclipse project): | |||||
</p> | |||||
<ol> | |||||
<li>Setup like the other modules, following the invariants below, esp. | |||||
<ol> | |||||
<li>same directory level</li> | |||||
<li>same naming conventions for source folders</li> | |||||
<li>same use of known classpath variables/entries</li> | |||||
</ol> | |||||
</li> | |||||
<li>Add module to those checked for copyright/license in | |||||
<a href="testsrc/org/aspectj/build/BuildModuleTests.java"> | |||||
testsrc/org/aspectj/build/BuildModuleTests.java | |||||
</a> | |||||
</li> | |||||
<li>Add module to module dependency tree as usual in Eclipse project properties</li> | |||||
<li>If the module is to produce a jar visible in {AspectJ}/lib, | |||||
then add a zero-length file of the correct name to | |||||
<a href="products/tools/dist/lib">products/tools/dist/lib</a> | |||||
and an alias to that file from the module name in | |||||
<a href="src/org/aspectj/internal/tools/build/Builder.properties"> | |||||
Builder.properties</a> | |||||
</li> | |||||
<li>To make the JUnit tests visible to the Ant builder, include a | |||||
top-level Ant suite titled {Module}ModuleTests.java | |||||
</li> | |||||
<li>Test the build in Eclipse/JUnit using | |||||
<a href="testsrc/org/aspectj/internal/build/BuildModuleTest.java"> | |||||
testsrc/org/aspectj/internal/build/BuildModuleTest.java | |||||
</a> | |||||
</li> | |||||
</ol> | |||||
<p> | |||||
How the build system introspects, and the build invariants that | |||||
are enforced by the Ant build: | |||||
</p> | |||||
<ul> | |||||
<li>A given module is identified by its directory name. | |||||
</li> | |||||
<li>Most modules are Eclipse Java projects; some are AspectJ projects. | |||||
Eclipse is not required to build. | |||||
</li> | |||||
<li>The file <code>{module.name}/.classpath</code> is read to determine | |||||
the source directories and required projects and libraries. | |||||
</li> | |||||
<li>Normal Java source files are in <code>src</code> and <code>testsrc</code> | |||||
directories. | |||||
</li> | |||||
<li>Java 5 source files are in <code>java5-src</code> and <code>java5-testsrc</code> | |||||
directories. | |||||
</li> | |||||
<li>Neither <code>testsrc</code> directory is used in production builds. | |||||
</li> | |||||
<li> | |||||
This only requires what's in the | |||||
<a href="../lib">../lib</a> directory and the usual Java VM's. | |||||
That means modules can only depend on each other and the libraries | |||||
in <a href="../lib">../lib</a>. | |||||
</li> | |||||
<li>Modules are built into jar files. <code>{module.name}.jar</code> | |||||
includes only the module classes, and <code>{module.name}-all.jar</code> | |||||
includes the module classes plus any antecendant modules and any | |||||
required libraries not skipped (see below). | |||||
</li> | |||||
<li>A file <code>{module.name}/{module.name}.mf.txt</code>, if available, | |||||
will be used as the jar file manifest, after replacing certain | |||||
variables in the <code>.mf.txt</code> file. | |||||
</li> | |||||
<li>All required libraries are included in the production jars, except | |||||
for testing libraries and those "skipped" in | |||||
<a href="src/org/aspectj/internal/tools/build/Builder.properties"> | |||||
Builder.properties</a> | |||||
(Ant, JUnit, etc.). | |||||
</li> | |||||
<li>Test classes are excluded from the compile process for production builds. | |||||
These result in the same jar files; there is no way to | |||||
tell externally whether the test classes were stripped from a jar. | |||||
</li> | |||||
<li>ONLY resources specified as <code>resource.pattern</code> in | |||||
<a href="src/org/aspectj/internal/tools/build/Builder.properties"> | |||||
Builder.properties</a> | |||||
are included with assembled jars. | |||||
</li> | |||||
<li>No <code>testing-*</code> module is used in production builds, | |||||
directly or indirectly. | |||||
</li> | |||||
<li>It is an error for any code to depend on any <code>testsrc</code> code, | |||||
whether in the same or another module. | |||||
</li> | |||||
<li>AspectJ projects are built in Ant using | |||||
<a href="../lib/aspectj">../lib/aspectj</a>. | |||||
</li> | |||||
<li>Java 5 code is not supported in AspectJ (yet). | |||||
</li> | |||||
<li>Java 5 code is built in Ant only if JAVA_HOME points to Java 5 (or later). | |||||
</li> | |||||
<li>No normal code can depend on any Java 5 code. | |||||
The build system checks by building everything using the | |||||
lowest VM supported by the tools. | |||||
</li> | |||||
</ul> | |||||
<p>That means there are a number of legal Eclipse projects and code | |||||
arrangements which are not valid AspectJ modules. | |||||
When you add modules, libraries, or dependencies, you must build | |||||
with Ant to verify these invariants are not broken. | |||||
</p> | |||||
<h3>Build problems</h3> | |||||
Some build problems and fixes encountered in the past: | |||||
<ul> | |||||
<li>If the build works in Eclipse, but fails in Ant, | |||||
do not assume the build scripts are broken. | |||||
See <a href="#antInvariants">Invariants enforced only in Ant</a>. | |||||
</li> | |||||
<li>If your compiles fail because Ant cannot find <code>javac</code>, | |||||
put the JDK bin directory on your PATH and/or define | |||||
the JAVA_HOME environment variable. | |||||
Ant requires the path to the <code>javac</code> executable | |||||
when the <code>BuildModule</code> taskdef runs. I think it either | |||||
gets it from <code>$JAVA_HOME</code> or if the <code>bin</code> | |||||
directory is on the <code>PATH</code>. | |||||
</li> | |||||
<li>If using an IBM JDK at version 1.4 or higher within Eclipse, | |||||
then the default value of JRE_LIB will point to the jar file | |||||
"core.jar." Unlike the Sun JDK, IBM does not package the full | |||||
runtime into a single jar ("rt.jar"), but instead has multiple | |||||
jar files. Since core.jar does not contain the graphics libraries, | |||||
several of the AspectJ projects will fail to build as checked out | |||||
of CVS - there are missing dependencies on AWT and swing. The | |||||
solution is to add graphics.jar to the project classpaths... BUT | |||||
if this is added as an ordinary (external jar), then the main | |||||
ant build script will pick up the contents of graphics.jar and | |||||
include it in the aspectj distribution (obvious clue, the size of | |||||
the built aspectjtools.jar doubles to about 10MB). Instead, from the | |||||
Java Build Path properties page of the project, select "Add Library" | |||||
and add the JDK library. You now have to remove the JRE_LIB entry | |||||
from the project or Eclipse complains about duplicate jar files | |||||
in the path. | |||||
</li> | |||||
<li>More generally, if you find extra classes in the assembled jars, | |||||
most likely you have added unexpected libraries to the build, e.g., | |||||
when adding libraries for the IBM JRE. | |||||
To skip those, add them to the "skip.libraries" list in | |||||
<a href="src/org/aspectj/internal/tools/build/Builder.properties"> | |||||
src/org/aspectj/internal/tools/build/Builder.properties</a>. | |||||
These libraries will always be skipped for any module built this way; | |||||
there is no way to include a library in one module but not another. | |||||
For more information on the properties file, see | |||||
<a href="readme-build-module.html">readme-build-module.html</a>. | |||||
</li> | |||||
</ul> | |||||
</body> | |||||
</html> |
<html> | |||||
<head> | |||||
<title>AspectJ build module</title> | |||||
</head> | |||||
<body> | |||||
<h1>AspectJ build</h1> | |||||
This build module contains taskdefs and resources for doing builds | |||||
and checking source licenses. This document describes our approach | |||||
to builds and provides some notes for maintaining the build module | |||||
and debugging builds. | |||||
For information | |||||
on running builds and doing testing for the AspectJ project, see | |||||
<a href="readme-build-and-test-aspectj.html"> | |||||
readme-build-and-test-aspectj.html</a>. | |||||
<h3>Approach</h3> | |||||
The AspectJ project source files are broken into modules, | |||||
the subdirectories of the modules directory. | |||||
(To eclipse users, each module is a Java or AspectJ project.) | |||||
The modules are compiled independently and may be assembled | |||||
by the build script into the release jar files. | |||||
All required libraries are checked into the <code>lib</code> module. | |||||
We use Ant to drive the build, but the logic for building and | |||||
assembling modules resides in the BuildModule taskdef, | |||||
which reads module dependencies from the Eclipse .classpath files | |||||
and assembles the product according to the templates in the | |||||
product directory. | |||||
This makes it easy to change dependencies and add modules, | |||||
but could make it difficult to debug if something were to go wrong. | |||||
<h3>Maintaining the build module</h3> | |||||
Because the BuildModule taskdef extracts dependencies from the Eclipse | |||||
<code>.classpath</code> file, there is no need to update build scripts when | |||||
adding or removing modules or changing their dependencies, so long | |||||
as they are all in the base modules directory (usually the base of | |||||
the eclipse workspace). | |||||
Likewise, updating a product assembly should be easy, | |||||
since they are based on introspection of the product directories. | |||||
Still, the taskdef workings are not obvious in the build script, so | |||||
this section makes clear some of the implicit logic | |||||
in case it's required when debugging build failures or | |||||
to make changes. | |||||
<h4>Build module code updates</h4> | |||||
The build module produces taskdefs used to run the build. | |||||
The scripts avoid bootstrapping by using a build library jar | |||||
checked in to | |||||
<code>lib/build/build.jar</code>. | |||||
That means code updates in the build module are not reflected in | |||||
the build process until the <code>build.jar</code> produced by | |||||
building this <code>build</code> module replaces that found in | |||||
<code>lib/build/build.jar</code>. Once the module update is | |||||
confirmed, the new <code>lib/build/build.jar</code> must be checked in | |||||
to propogate the changes to other users. | |||||
The scripts support an Ant variable <code>check.build.jar</code> | |||||
by warning when <code>lib/build/build.jar</code> is out of date. | |||||
<h4>BuildModule task</h4> | |||||
The | |||||
<a href="src/org/aspectj/internal/tools/ant/taskdefs/BuildModule.java"> | |||||
BuildModule</a> | |||||
taskdef implements an integrated module or product build. | |||||
<p/><u>Module builds</u> are based on the Eclipse <code>.classpath</code> | |||||
file, and can produce | |||||
a jar with the module classes, with two variations: | |||||
<ul> | |||||
<li> include only the module classes, | |||||
or assemble the jar complete with all antecedent modules and | |||||
libraries; | |||||
</li><li>compile the module(s) with or without any | |||||
testing source or libraries | |||||
</li> | |||||
</ul> | |||||
If there is a file {moduleName}.mf.txt | |||||
in the module directory, it will be used as the manifest for the | |||||
module jar file. | |||||
<p/><u>Product builds</u> are defined by introspection of a | |||||
<a href="products">products</a> subdirectory like | |||||
<a href="products/tools">products/tools</a> for the AspectJ installer. | |||||
These have an <code>install</code> directory for installer resources | |||||
and a <code>dist</code> directory containing all files belonging in | |||||
the distribution, including 0-length placeholders for the module build | |||||
results (e.g., <a href="products/tools/dist/lib">products/tools/dist/lib</a>). | |||||
These placeholder file names are mapped to the originating | |||||
module by <code>Builder.moduleAliasFor(String)</code> | |||||
using values in | |||||
<a href="src/org/aspectj/internal/tools/build/Builder.properties"> | |||||
Builder.properties</a>. | |||||
(The "-all" suffix in the source jars means that the module and all required | |||||
modules are included.) | |||||
<p/> | |||||
<a name="version"></a> | |||||
<h4>Version synchronization</h4> | |||||
The version is expressed in the jar manifests, in the <code>Version</code> class, | |||||
and in some documentation files. The build script | |||||
ensures all version expressions | |||||
are aligned. When not doing or testing release builds, | |||||
developers use the default "DEVELOPMENT" version. | |||||
<p/>The build version is set in | |||||
<a href="build-properties.xml">build-properties.xml</a> and propogated | |||||
using Ant copy filters out to | |||||
the <a href="../aspectj5rt/aspectj5rt.mf.txt">aspectjrt.jar manifest</a>, | |||||
the <a href="../ajbrowser/ajbrowser.mf.txt">aspectjtools.jar manifest</a> | |||||
and to | |||||
<a href="../bridge/src/org/aspectj/bridge/Version.java"> | |||||
../bridge/src/org/aspectj/bridge/Version.java</a> | |||||
which the <a href="build.xml">build.xml</a> <code>init-version</code> task | |||||
generates from a template | |||||
<a href="lib/BridgeVersion.java.txt">lib/BridgeVersion.java.txt</a>. | |||||
To avoid updating <code>Version.java</code> whenever | |||||
<code>build-properties.xml</code> changes, a task | |||||
<a href="src/org/aspectj/internal/tools/ant/taskdefs/VersionUptodate.java"> | |||||
src/org/aspectj/internal/tools/ant/taskdefs/VersionUptodate.java</a> | |||||
determines whether Version.java has the same version by scanning the source file. | |||||
The scan is dim-witted; do not change the lines flagged in the template | |||||
without also changing the scanning code in the task. | |||||
<h4>Temporary aj-{name} and persistant aspectj-{name}</h4> | |||||
<p/> | |||||
Top-level temporary build directories are prefixed "aj-", | |||||
so you can safely destroy any such directory or ignore it | |||||
in CVS or the Eclipse package explorer. By default the build script | |||||
puts them at the same level as other modules. In build scripts, property names | |||||
follow a similar convention; those prefixed "aj-" may be deleted at will, while | |||||
"aspectj-" names are source directories which should never be deleted. | |||||
<h4>Building Java 5 sources</h4> | |||||
<p/> | |||||
Java 5 source is supported in <code>{module}/java5-src</code> directories. | |||||
Under Ant, when building in a pre-Java-5 VM, this source will be ignored | |||||
(hence, it must not be required to compile). Under Eclipse, developers | |||||
not using Java 5 should close the corresponding modules. | |||||
<h4>Builder.properties, resources, and tree audit tests</h4> | |||||
<p/> | |||||
In <a href="src/org/aspectj/internal/tools/build/Builder.properties"> | |||||
src/org/aspectj/internal/tools/build/Builder.properties</a> | |||||
you can set up | |||||
<ul> | |||||
<li>product aliases for mapping module jars</li> | |||||
<li>libraries to exclude for assembling module jars</li> | |||||
<li>patterns for copying resources.</li> | |||||
</ul> | |||||
Regarding the patterns, if you add a resource with an unrecognized suffix to a | |||||
source tree, the corresponding unit test in | |||||
<a href="testsrc/BuildModuleTests.java">testsrc/BuildModuleTests.java</a> | |||||
will fail. You'll need to update the <code>Builder.properties</code> | |||||
file (and recreate the build.jar) to ensure that the new resource | |||||
is copied to the assembled module jar. | |||||
<h3>Debugging build problems</h3> | |||||
<h4>Running under Eclipse</h4> | |||||
When running Ant from eclipse, | |||||
do not use the default Eclipse Ant classpath; remove those jars and | |||||
add all the libraries in <a href="../lib/ant/lib">../lib/ant/lib</a> | |||||
as well as in <a href="../lib/junit">../lib/junit</a>. | |||||
If the build is failing under eclipse or Ant and the problem appears | |||||
to be in the build module, you can run the build directly in eclipse | |||||
(not using the Ant script) by running the skipped JUnit tests in | |||||
<a href="testsrc/org/aspectj/internal/build/ModulesTests.java"> | |||||
testsrc/org/aspectj/internal/build/ModulesTests.java</a>. | |||||
<p/> | |||||
<h4>Why new or changed modules might not work</h4> | |||||
The BuildModule taskdef makes some assumptions about the naming, | |||||
position, and contents of module directories and files. | |||||
Understand those (documented in | |||||
<a href="src/org/aspectj/internal/tools/ant/taskdefs/BuildModule.java"> | |||||
BuildModule.java</a>) before using non-standard module directories. | |||||
<h4>Silent classpath and build failures</h4> | |||||
<u>warning</u>: When Ant runs compile processes, sometimes Jar files | |||||
are not closed until the process quits. When running Ant under Eclipse, | |||||
that means the jar files are not writable until eclipse quits. | |||||
This affects build products (e.g., installers) which are run under eclipse | |||||
(e.g., by opening with the "default system editor") and libraries used | |||||
when compiling under Javac (if not zip products or input). This problem | |||||
presents as files not being writable, i.e., deleted or modified. | |||||
<p/> | |||||
One workaround is to delete any existing build products | |||||
before re-creating them. The problem with this is that Ant provides no | |||||
notice of that deletes fail when deleting with quiet="on", but when not | |||||
running in quiet mode, deletes will fail if the directory does not exist. | |||||
The workaround-workaround would be to create any required directories | |||||
before trying to deleting any files, with the result of creating unused | |||||
empty directories. | |||||
<p/> | |||||
Currently BuildModule tasks forks the Javac command to try to work around | |||||
this problem, but the Zip commands do not work around it. | |||||
If under Eclipse, you get strange behavior with Ant builds, clear | |||||
out everything and build from the command line. In some cases, you | |||||
have to exit Eclipse before files can be deleted. (*sigh*) | |||||
<p/> | |||||
</body> | |||||
</html> |
<!-- ========================================================================= --> | |||||
<!-- Copyright (c) 2005 Contributors --> | |||||
<!-- All rights reserved. --> | |||||
<!-- This program and the accompanying materials are made available --> | |||||
<!-- under the terms of the Eclipse Public License v 2.0 --> | |||||
<!-- which accompanies this distribution and is available at --> | |||||
<!-- https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt --> | |||||
<!-- --> | |||||
<!-- Contributors: (See CVS checkin's) --> | |||||
<!-- Wes Isberg initial implementation --> | |||||
<!-- ========================================================================= --> | |||||
<project name="test-build-script" default="all" basedir="."> | |||||
<property name="modules.dir" location="${basedir}/.."/> | |||||
<import file="${modules.dir}/build/build-properties.xml"/> | |||||
<target name="all" depends="failures"/> | |||||
<target name="failures" depends="init-properties"> | |||||
<delete file="${aj.failure.file}"/> | |||||
<echo message="-> no false negative (no file)"/> | |||||
<antcall target="fail-if-failures"/> | |||||
<touch file="${aj.failure.file}"/> | |||||
<echo message="-> no false negative (empty file)"/> | |||||
<antcall target="fail-if-failures"/> | |||||
<echo message="-> no false negative (unset Property)"/> | |||||
<report-if-failed text="not error text" property="unsetProperty"/> | |||||
<antcall target="fail-if-failures"/> | |||||
<echo message="-> true negative (set Property)"/> | |||||
<property name="setProperty" value="."/> | |||||
<report-if-failed text="error text" property="setProperty"/> | |||||
<antcall target="fail-if-failures"/> | |||||
<loadfile property="emit" srcfile="${aj.failure.file}"/> | |||||
<echo message="-> file contents: ${emit}"/> | |||||
</target> | |||||
</project> |
#!/bin/sh | |||||
[ -n "$DEBUG" ] && set -vx | |||||
genAntScript=${genAntScript} # anything to create Ant script instead | |||||
eclipseDir=`cd $HOME/../apps/eclipse && pwd` | |||||
[ -d "$eclipseDir" ] || exit 3 | |||||
scriptDir=`dirname "$0` | |||||
scriptDir=`cd "$scriptDir"; pwd` | |||||
cd "$scriptDir/../.." # in lib/build | |||||
listAllPlugins() { | |||||
cd "$eclipseDir/plugins" | |||||
ls -d * | |||||
} | |||||
# try first without ant | |||||
jdtPlugins() { | |||||
cat<<EOF | |||||
org.apache.ant_1.4.1 | |||||
org.apache.xerces_4.0.3 | |||||
org.eclipse.core.boot_2.0.0 | |||||
org.eclipse.core.resources_2.0.0 | |||||
org.eclipse.core.runtime_2.0.0 | |||||
EOF | |||||
} | |||||
#return paths from eclipse plugin dir to jdt jars | |||||
jdtPluginJars() { | |||||
curDir=`pwd` | |||||
for i in `jdtPlugins` ; do | |||||
cd "$eclipseDir/plugins/$i" | |||||
for j in *.jar; do | |||||
echo "$i/$j" | |||||
done | |||||
cd "$curDir" | |||||
done | |||||
} | |||||
verifyingCreatedAndActual() { | |||||
cat<<EOF | |||||
rm made | |||||
\$JDKDIR/bin/jar tf jdtDepends.jar \ | |||||
| sed '/META-INF/d' \ | |||||
| sort > made | |||||
rm have | |||||
\$JDKDIR/bin/jar tf \ | |||||
c:/home/wes/aj/aspectj/modules/lib/eclipse2.0/jdtDepends.jar \ | |||||
| sed '/META-INF/d' \ | |||||
| sort > have | |||||
diff made have | |||||
1720d1719 | |||||
< org/w3c/dom/html/HTMLDOMImplementation.class | |||||
EOF | |||||
} | |||||
cd "$eclipseDir/plugins" | |||||
if [ -n "$genAntScript" ] ; then | |||||
cat<<EOF | |||||
<!-- | |||||
<property name="eclipseDir" | |||||
location="\${eclipseDir}"/> | |||||
--> | |||||
<target name="jdtDepends.jar" if="\${eclipseDir}" > | |||||
<jar destfile="jdtDepends.jar" > | |||||
<zipgroupfileset dir="\${eclipseDir}/plugins"> | |||||
EOF | |||||
for k in `jdtPluginJars` ; do | |||||
cat <<EOF | |||||
<include name="$k" /> | |||||
EOF | |||||
done | |||||
cat <<EOF | |||||
</zipgroupfileset> | |||||
</jar> | |||||
</target> | |||||
EOF | |||||
else | |||||
mkdir tempzzz; cd tempzzz ; rm -rf *; | |||||
for k in `jdtPluginJars` ; do | |||||
"$JDKDIR"/bin/jar xf ../$k | |||||
done | |||||
"$JDKDIR"/bin/jar cfM ../jdtDepends.jar . | |||||
cd .. | |||||
mv jdtDepends.jar "$scriptDir" | |||||
ls -ald "$scriptDir/jdtDepends.jar" | |||||
fi |