new build process for HttpClient, currently builds a single JAR for all, addon targets are pointless yet

git-svn-id: https://svn.apache.org/repos/asf/jakarta/httpcomponents/httpclient/trunk@440076 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Roland Weber 2006-09-04 13:48:39 +00:00
parent 85e0dcacb1
commit 8de8066f83
1 changed files with 498 additions and 39 deletions

537
build.xml
View File

@ -1,53 +1,512 @@
<project name="Jakarta HttpCompomponents HttpClient" default="compile" basedir=".">
<?xml version="1.0" encoding="UTF-8"?>
<!--
/*
* Copyright 2006 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<property file="${basedir}/build.properties"/>
<property file="${basedir}/../project/build.properties"/>
<property file="${user.home}/build.properties"/>
<project name="HttpClient" basedir="." default="package-src">
<description>
HttpClient: Jakarta HttpComponents Client
</description>
<!-- ========== Required component properties ============================= -->
<property name="component.name" value="httpclient"/>
<property name="component.title" value="Jakarta HttpComponents HttpClient"/>
<property name="component.version" value="4.0-alpha1-SNAPSHOT"/>
<property name="component.home" value="${basedir}"/>
<property name="component.src" value="${component.home}/src/java"/>
<property name="component.tests" value="${component.home}/src/test"/>
<property name="component.xmpls" value="${component.home}/src/examples"/>
<!-- ========== External dependencies ===================================== -->
<!-- Definition of the local environment.
The default location of the build.properties assumes that you are
building from the full tree of all HTTP components, and have a
single build.properties file located in ${root}/project/. If this is
not the case, override property local.properties when calling Ant.
<property name="http.core.home" value="../httpcore"/>
<property name="http.core.classes" value="${http.core.home}/target/classes"/>
Use this file to specify the location of external dependencies,
and to override other properties defined below if you have to.
<path id="component.depends">
<pathelement location="${component.classes}"/>
<pathelement location="${http.core.classes}"/>
</path>
External dependencies for which there is a default location:
httpcore.jar - always
javadoc.j2sdk.link - for javadoc
dist.core.api - for javadoc
<!-- ========== Import common targets and macrdefs ======================== -->
External dependencies for which there is no default location:
commons-logging.jar - (to be added to default dependencies)
junit.jar - for test and clover targets
clover.jar - for clover target
-->
<property name="local.properties" location="../project/build.properties" />
<property file="${local.properties}" />
<import file="../project/build-common.xml"/>
<!-- ========== Targets: "External" Targets: Compilation ================== -->
<!-- component and version information -->
<property name="comp.client.name"
value="httpclient"/>
<property name="comp.client.title"
value="Jakarta HttpComponents Client"/>
<property name="comp.client.version"
value="SNAPSHOT"/>
<target name="compile" depends="prepare">
<do-compile/>
</target>
<!-- external dependencies
These are prime candidates for overriding in local.properties.
The defaults assume again that you are building from the full tree
of HTTP components, and that other components use the default
build settings.
The '.jar properties must be set to either to a JAR file in which
the classes are packaged, or to a directory tree holding them.
-->
<target name="test" depends="compile">
<do-test testentry="org.apache.httpclient.TestAll"/>
</target>
<property name="httpcore.home" location="../httpcore" />
<property name="httpcore.jar"
location="${httpcore.home}/module-main/target/classes" />
<property name="dist.core.api"
location="${httpcore.home}/dist/docs/api/" />
<target name="javadoc" depends="compile">
<do-javadoc packagenames ="org.apache.http.*"/>
</target>
<path id="classpath.client.compile">
<pathelement location="${httpcore.jar}"/>
<!-- <pathelement location="${commons-logging.jar}"/> -->
</path>
<target name="clover" depends="clover-db, test">
<do-clover/>
</target>
<path id="classpath.client.javadoc">
<path refid="classpath.client.compile" />
<!-- add dependencies for contrib classes for which to JavaDoc -->
</path>
<target name="package" depends="compile">
<do-package/>
</target>
</project>
<!-- directory structure of the source tree -->
<property name="comp.client.home" value="${basedir}"/>
<property name="comp.client.src" value="${comp.client.home}/src/java"/>
<property name="comp.client.tests" value="${comp.client.home}/src/test"/>
<property name="comp.client.xmpls" value="${comp.client.home}/src/examples"/>
<property name="comp.client.contr" value="${comp.client.home}/src/contrib"/>
<!-- locations for intermediate and final build results
For consistency with other builds, the temporary files are
located by default below "target/", final results below "dist/".
-->
<property name="build.client.home" value="${comp.client.home}/target"/>
<property name="build.client.classes" value="${build.client.home}/classes"/>
<property name="build.client.tests" value="${build.client.home}/tests"/>
<property name="build.client.xmpls" value="${build.client.home}/examples"/>
<property name="build.client.contr" value="${build.client.home}/contrib"/>
<property name="build.client.clover" value="${build.client.home}/clover"/>
<property name="dist.client.home" value="${comp.client.home}/dist"/>
<property name="dist.client.docs" value="${dist.client.home}/docs"/>
<property name="dist.client.api" value="${dist.client.docs}/api"/>
<property name="jar.client.src.name"
value="jakarta-${comp.client.name}-${comp.client.version}.jar" />
<property name="jar.client.addon.name"
value="jakarta-${comp.client.name}-addon-${comp.client.version}.jar" />
<!-- compiler and javadoc setup -->
<property name="compile.debug" value="true"/>
<property name="compile.deprecation" value="true"/>
<property name="compile.optimize" value="true"/>
<property name="compile.source" value="1.4"/>
<property name="compile.target" value="1.4"/>
<property name="javadoc.access" value="protected"/>
<property name="javadoc.j2sdk.link"
value="http://java.sun.com/j2se/1.4.2/docs/api/" />
<!-- build targets ======================================================== -->
<target name="echo-properties"
description="echo properties to verify the build setup"
>
<echo>
General
component ${comp.client.name}
component title ${comp.client.title}
component version ${comp.client.version}
base directory ${basedir}
local properties ${local.properties}
Dependencies
HttpCore ${httpcore.jar}
Commons Logging ${commons-logging.jar}
JUnit ${junit.jar}
Clover ${clover.jar}
Source Tree
base ${comp.client.home}
main ${comp.client.src}
tests ${comp.client.tests}
examples ${comp.client.xmpls}
contrib ${comp.client.contr}
Output
temp ${build.client.home}
final ${dist.client.home}
javadoc ${dist.client.api}
</echo>
</target>
<!-- traditional targets ======================================================
These targets match the ones before the build restructuring, except:
- "javadoc" does not depend on "compile"
- "clover" will always recompile the source and tests
-->
<target name="compile" depends="compile-src" />
<target name="package" depends="package-src" />
<target name="javadoc" depends="javadoc-src" />
<target name="test" depends="compile-src,run-tests" />
<target name="clover" depends="run-clover" />
<target name="clean" depends="clean-build,clean-dist" />
<!-- combined compilation targets =============================================
For external invocation.
See also the packaging and test/verification targets below
-->
<target name="compile-all"
depends="compile-src,compile-tests,
compile-examples,compile-contrib"
description="compiles everything, not from scratch"
/>
<target name="clean-compile"
depends="clean-src,clean-tests,
clean-examples,clean-contrib"
description="cleans intermediate files from compilation"
/>
<target name="compile-all-fs"
depends="clean-compile,compile-all"
description="compiles everything from scratch"
/>
<!-- compile and clean targets ================================================
For compiling and recompiling specific parts of HttpClient code.
These targets do NOT define dependencies between eachother.
Direct invocation of these targets is for those who know what they do!
-->
<target name="compile-src" depends="build-init">
<mkdir dir="${build.client.classes}" />
<javac destdir ="${build.client.classes}"
debug ="${compile.debug}"
deprecation ="${compile.deprecation}"
optimize ="${compile.optimize}"
source ="${compile.source}"
target ="${compile.target}"
>
<src>
<pathelement location="${comp.client.src}"/>
</src>
<classpath>
<path refid="classpath.client.compile"/>
</classpath>
</javac>
</target>
<target name="clean-src">
<delete dir="${build.client.classes}" quiet="true" />
</target>
<target name="compile-tests" depends="build-init">
<mkdir dir="${build.client.tests}" />
<javac destdir ="${build.client.tests}"
debug ="${compile.debug}"
deprecation ="${compile.deprecation}"
optimize ="${compile.optimize}"
source ="${compile.source}"
target ="${compile.target}"
>
<src>
<pathelement path="${comp.client.tests}"/>
</src>
<classpath>
<path refid="classpath.client.compile"/>
<pathelement location="${build.client.classes}"/>
<pathelement location="${junit.jar}"/>
</classpath>
</javac>
</target>
<target name="clean-tests">
<delete dir="${build.client.tests}" quiet="true" />
</target>
<target name="compile-examples" depends="build-init">
<mkdir dir="${build.client.xmpls}" />
<javac destdir ="${build.client.xmpls}"
debug ="${compile.debug}"
deprecation ="${compile.deprecation}"
optimize ="${compile.optimize}"
source ="${compile.source}"
target ="${compile.target}"
>
<src>
<pathelement path="${comp.client.xmpls}"/>
</src>
<classpath>
<path refid="classpath.client.compile"/>
<pathelement location="${build.client.classes}"/>
</classpath>
</javac>
</target>
<target name="clean-examples">
<delete dir="${build.client.xmpls}" quiet="true" />
</target>
<target name="compile-contrib" depends="build-init">
<mkdir dir="${build.client.contr}" />
<javac destdir ="${build.client.contr}"
debug ="${compile.debug}"
deprecation ="${compile.deprecation}"
optimize ="${compile.optimize}"
source ="${compile.source}"
target ="${compile.target}"
>
<src>
<pathelement path="${comp.client.contr}"/>
</src>
<classpath>
<path refid="classpath.client.compile"/>
<pathelement location="${build.client.classes}"/>
</classpath>
</javac>
</target>
<target name="clean-contrib">
<delete dir="${build.client.contr}" quiet="true" />
</target>
<!-- packaging and verification targets =======================================
For building JARs and running tests.
Targets for building JARs define dependencies on compilation targets.
Unlike with Maven, running tests is not a dependency for packaging.
The plain test target defines dependencies on the test classes, but
not on the classes to be tested. It should be possible to run a test
target without affecting the subject of the test. The "from scratch"
test target defines transitive dependencies on the subject classes.
-->
<target name="package-src"
depends="dist-init,compile-src"
description="builds the JAR with HttpClient classes"
>
<jar destfile="${dist.client.home}/${jar.client.src.name}">
<!-- manifest? -->
<!-- timestamp in meta-inf? -->
<fileset dir="${build.client.classes}" includes="**" />
</jar>
</target>
<target name="package-src-fs"
depends="clean-src,package-src"
description="builds the JAR with HttpClient classes, compiling from scratch"
/>
<target name="package-addon"
depends="dist-init,compile-src,
compile-examples,compile-contrib"
description="builds the JAR with HttpClient examples and contributions"
>
<jar destfile="${dist.client.home}/${jar.client.addon.name}">
<!-- manifest? -->
<!-- timestamp in meta-inf? -->
<fileset dir="${build.client.xmpls}" includes="**" />
<fileset dir="${build.client.contr}" includes="**" />
</jar>
</target>
<target name="package-addon-fs"
depends="clean-examples,clean-contrib,package-addon"
description="builds the JAR with HttpClient examples and contributions, compiling them from scratch"
/>
<target name="run-tests"
depends="build-init,compile-tests"
description="runs unit tests on HttpClient classes"
>
<copy todir="${build.client.tests}" filtering="on">
<fileset dir="${comp.client.tests}" excludes="**/*.java" />
</copy>
<!-- don't use Ant optional JUnit tasks here -->
<java classname="junit.textui.TestRunner"
fork="yes" failonerror="yes"
>
<arg value="org.apache.httpclient.TestAll"/>
<classpath>
<path refid="classpath.client.compile"/>
<pathelement location="${junit.jar}"/>
<pathelement location="${clover.jar}"/>
<pathelement location="${build.client.classes}"/>
<pathelement location="${build.client.tests}"/>
</classpath>
</java>
</target>
<target name="run-tests-fs"
depends="clean-build,compile-src,run-tests"
/>
<!-- Clover always needs a recompile to instrument the source code.
clean-build enforces the recompilation, clover-init prepares
the Ant environment for Clover instrumentation.
-->
<target name="run-clover"
depends="clean-build,clover-init,compile-src,run-tests"
description="runs Clover on HttpClient, recompiling everything from scratch"
>
<echoproperties prefix="clover"/>
<mkdir dir="${build.client.clover}"/>
<clover-report>
<current outfile="${build.client.clover}/coverage-report">
<format type="html"/>
</current>
</clover-report>
</target>
<target name="javadoc-src"
description="generates JavaDoc for the HttpClient classes"
>
<mkdir dir="${dist.client.api}" />
<javadoc destdir="${dist.client.api}"
access="${javadoc.access}"
version="true"
author="true"
windowtitle="${comp.client.title} (Version ${comp.client.version})"
>
<packageset dir="${comp.client.src}">
<include name="org/apache/http/**" />
<include name="org/apache/httpclient/**" />
</packageset>
<group title="API">
<package name="org.apache.http.conn" />
<package name="org.apache.http.conn*" />
<package name="org.apache.http.cookie" />
<package name="org.apache.http.cookie.params" />
<package name="org.apache.httpclient" />
</group>
<group title="Implementation">
<package name="*.impl.*" />
</group>
<classpath refid="classpath.client.javadoc"/>
<link href="${javadoc.j2sdk.link}"/>
<link href="${dist.core.api}"/>
<doctitle>${comp.client.title}</doctitle>
<bottom>Copyright (c) 2005-2006 - Apache Software Foundation</bottom>
</javadoc>
</target>
<target name="javadoc-addon"
description="generates JavaDoc including examples and contributions"
>
<mkdir dir="${dist.client.api}" />
<javadoc destdir="${dist.client.api}"
access="${javadoc.access}"
version="true"
author="true"
windowtitle="${comp.client.title} (Version ${comp.client.version})"
>
<packageset dir="${comp.client.src}">
<include name="org/apache/http/**" />
</packageset>
<packageset dir="${comp.client.xmpls}">
<include name="org/apache/http/**" />
</packageset>
<packageset dir="${comp.client.contr}">
<include name="org/apache/http/**" />
</packageset>
<group title="API">
<package name="org.apache.http.client" />
</group>
<group title="Implementation">
<package name="org.apache.http.client.impl*" />
</group>
<group title="Examples">
<package name="org.apache.http.examples*" />
</group>
<group title="Contributions (unsupported)">
<package name="org.apache.http.client.contrib*" />
</group>
<classpath refid="classpath.client.javadoc"/>
<link href="${javadoc.j2sdk.link}"/>
<link href="${dist.core.api}"/>
<doctitle>${comp.client.title}</doctitle>
<bottom>Copyright (c) 2005-2006 - Apache Software Foundation</bottom>
</javadoc>
</target>
<!-- generic and helper targets =========================================== -->
<target name="build-init">
<mkdir dir="${build.client.home}" />
</target>
<target name="clean-build"
description="cleans all intermediate files, including test reports"
>
<delete dir="${build.client.home}" quiet="true" />
</target>
<target name="dist-init">
<mkdir dir="${dist.client.home}" />
<!-- timestamp? (in build directory!) -->
<!-- manifest? (in build directory!) -->
</target>
<target name="clean-dist"
description="cleans all final build results"
>
<!-- By default, dist.client.docs and dist.client.api are located
below dist.client.home and will be cleaned here. If their
location is redefined to be somewhere else, they will not
be cleaned here. Use the targets dist-docs-clean or
dist-api-clean to achieve that.
-->
<delete dir="${dist.client.home}" quiet="true" />
<!-- delete timestamps and manifests from build.client.home? -->
</target>
<target name="dist-docs-clean">
<delete dir="${dist.client.docs}" quiet="true" />
</target>
<target name="dist-api-clean">
<delete dir="${dist.client.api}" quiet="true" />
</target>
<target name="clover-init">
<taskdef resource="clovertasks" />
<property name="build.client.clover.db"
location="${build.client.clover}/database" />
<mkdir dir="${build.client.clover.db}"/>
<!-- This task prepares the Ant environment for Clover instrumentation.
Everything compiled afterwards will be instrumented if it matches
the fileset(s) defined here.
-->
<clover-setup initString="${build.client.clover.db}/coverage.db" >
<fileset dir="${comp.client.src}" includes="**" />
</clover-setup>
</target>
</project><!-- HttpClient -->