| <?xml version="1.0"?> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You 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. |
| --> |
| <project name="JMeter" default="install" basedir="."> |
| <description> |
| |
| N.B. To build JMeter from a release you need both the binary and source archives, |
| and these must be unpacked into the same directory structure. |
| |
| To download additional jars needed for building the code and documentation: |
| |
| ant download_jars |
| |
| |
| To build JMeter from source: |
| ant [install] |
| |
| To rebuild: |
| ant clean install |
| |
| To update documentation |
| ant docs-site |
| ant docs-printable |
| To build API documentation (Javadoc) |
| ant docs-api |
| To build all the docs |
| ant docs-all |
| |
| To build all and package up the files for distribution |
| ant distribution -Djmeter.version=vvvv [-Dsvn.revision=nnnnn] |
| |
| Add -Ddisable-svnCheck=true to disable svn check, if you build from src archive or offline |
| Add -Ddisable-check-versions=true to disable matching current svn revision and JMeterVersion.java, |
| if you want build your own custom JMeter package. |
| |
| To create a nightly build (separate bin/src/lib jars): |
| ant nightly [-Dsvn.revision=nnnnn] |
| |
| To create tar and tgz of the web-site documentation (docs and api) |
| ant site [ -Djmeter.version=vvvv ] |
| |
| |
| For more info: |
| ant -projecthelp |
| |
| To diagnose usage of deprecated APIs: |
| ant -Ddeprecation=on clean compile |
| </description> |
| |
| <!-- |
| |
| Note |
| ==== |
| As with most other Apache projects, Gump (http://gump.apache.org/) is used to |
| perform automated builds and tests on JMeter. |
| |
| Gump uses its project/jmeter.xml file to determine which target to use. |
| The current setting is: <ant target="dist"> |
| |
| Any changes to the dependency list for dist may affect Gump. |
| |
| Now the dist target depends on "assume-libs-present", so if additional libraries are added to that, |
| the Gump project file for JMeter must also be updated. |
| |
| Jars that are not required by the dist target do not need to be added to the Gump project file. |
| |
| --> |
| |
| <!-- Are we running under Gump? --> |
| <property name="gump.run" value="false"/> |
| |
| <!-- The version of this file --> |
| <property name="version.build" value="$Revision$"/> |
| |
| <property file="build-local.properties"/> <!-- allow local overrides --> |
| |
| <!-- Findbugs task and target --> |
| <!-- |
| Findbugs is licensed under the Lesser GNU Public License |
| HomePage: http://www.cs.umd.edu/~pugh/java/bugs/ |
| |
| To use the findbugs target, download and install the findbugs binary distribution |
| Set the value of findbugs.homedir according to where you installed findbugs, for example: |
| ant findbugs -Dfindbugs.homedir=/etc/findbugs -Dfindbugs.level=medium |
| [The defaults are /findbugs and medium] |
| --> |
| <property name="findbugs.homedir" value="/findbugs" /> |
| <property name="findbugs.level" value="medium" /> |
| <property name="findbugs.xsldir" value="${findbugs.homedir}/src/xsl" /> |
| <property name="findbugs.xslname" value="fancy" /> |
| <property name="findbugs.outName" value="reports/jmeter-fb" /> |
| |
| <target name="findbugs" description="Run the stand-alone Findbugs detector"> |
| <echoproperties prefix="findbugs"/> |
| <mkdir dir="reports"/> |
| <taskdef name="findbugs" |
| classpath="${findbugs.homedir}/lib/findbugs-ant.jar" |
| classname="edu.umd.cs.findbugs.anttask.FindBugsTask"/> |
| <findbugs home="${findbugs.homedir}" |
| output="xml:withMessages" |
| reportlevel="${findbugs.level}" |
| excludeFilter="fb-excludes.xml" |
| jvmargs="-Xms512m -Xmx512m" |
| outputFile="${findbugs.outName}.xml" > |
| <sourcePath path="${src.core}" /> |
| <sourcePath path="${src.http}" /> |
| <sourcePath path="${src.ftp}" /> |
| <sourcePath path="${src.java}" /> |
| <sourcePath path="${src.junit}" /> |
| <sourcePath path="${src.jdbc}" /> |
| <sourcePath path="${src.ldap}" /> |
| <sourcePath path="${src.mail}" /> |
| <sourcePath path="${src.components}" /> |
| <sourcePath path="${src.functions}" /> |
| <class location="${lib.dir}/jorphan.jar" /> |
| <class location="${dest.jar}/ApacheJMeter_components.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_components.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_core.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_ftp.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_functions.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_http.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_java.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_jdbc.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_jms.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_junit.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_ldap.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_mail.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_monitors.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_native.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_mongodb.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_report.jar"/> |
| <class location="${dest.jar}/ApacheJMeter_tcp.jar"/> |
| <class location="${dest.jar.jmeter}/ApacheJMeter.jar" /> |
| <sourcePath path="${src.jorphan}" /> |
| <sourcePath path="${src.tcp}" /> |
| <sourcePath path="${src.jms}" /> |
| <sourcePath path="${src.native}" /> |
| <sourcePath path="${src.mongodb}" /> |
| <sourcePath path="${src.report}" /> |
| |
| <auxClasspath> |
| <fileset dir="${lib.dir}"> |
| <include name="*.jar"/> |
| </fileset> |
| </auxClasspath> |
| |
| <auxClasspath> |
| <fileset dir="${lib.opt}"> |
| <include name="*.jar"/> |
| </fileset> |
| </auxClasspath> |
| |
| <auxClasspath> |
| <fileset dir="${lib.api}"> |
| <include name="*.jar"/> |
| </fileset> |
| </auxClasspath> |
| |
| </findbugs> |
| <antcall target="findbugs-style"/> |
| <antcall target="findbugs-xsl"/> |
| </target> |
| |
| <!-- Convert findbugs XML output to CSV --> |
| <target name="findbugs-style"> |
| <xslt style="fb-csv.xsl" |
| force="true" |
| in="${findbugs.outName}.xml" |
| out="${findbugs.outName}.csv"> |
| </xslt> |
| </target> |
| |
| <!-- Convert findbugs XML output to HTML --> |
| <target name="findbugs-xsl"> |
| <xslt style="${findbugs.xsldir}/${findbugs.xslname}.xsl" |
| force="true" |
| in="${findbugs.outName}.xml" |
| out="${findbugs.outName}_${findbugs.xslname}.html"> |
| </xslt> |
| </target> |
| |
| <!-- Where the Sources live --> |
| <property name="src.dir" value="src"/> |
| <property name="src.core" value="src/core"/> |
| <property name="src.http" value="src/protocol/http"/> |
| <property name="src.ftp" value="src/protocol/ftp"/> |
| <property name="src.test" value="test/src"/> |
| <property name="src.jdbc" value="src/protocol/jdbc"/> |
| <property name="src.java" value="src/protocol/java"/> |
| <property name="src.junit" value="src/junit"/> |
| <property name="src.components" value="src/components"/> |
| <property name="src.functions" value="src/functions"/> |
| <property name="src.jorphan" value="src/jorphan"/> |
| <property name="src.ldap" value="src/protocol/ldap"/> |
| <property name="src.tcp" value="src/protocol/tcp"/> |
| <property name="src.examples" value="src/examples"/> |
| <property name="src.mail" value="src/protocol/mail"/> |
| <property name="src.monitor.components" value="src/monitor/components"/> |
| <property name="src.monitor.model" value="src/monitor/model"/> |
| <property name="src.jms" value="src/protocol/jms"/> |
| <property name="src.native" value="src/protocol/native"/> |
| <property name="src.mongodb" value="src/protocol/mongodb"/> |
| <property name="src.report" value="src/reports"/> |
| |
| <!-- Where the documentation sources live --> |
| <property name="src.docs" value="xdocs"/> |
| <property name="src.css" value="xdocs/css"/> |
| <property name="src.images" value="xdocs/images"/> |
| <property name="src.demos" value="xdocs/demos"/> |
| |
| <!-- Javadoc sources --> |
| <path id="srcpaths"> |
| <pathelement location="${src.core}"/> |
| <pathelement location="${src.components}"/> |
| <pathelement location="${src.functions}"/> |
| <pathelement location="${src.http}"/> |
| <pathelement location="${src.ftp}"/> |
| <pathelement location="${src.jdbc}"/> |
| <pathelement location="${src.java}"/> |
| <pathelement location="${src.junit}"/> |
| <pathelement location="${src.jorphan}"/> |
| <pathelement location="${src.ldap}"/> |
| <pathelement location="${src.tcp}"/> |
| <pathelement location="${src.examples}"/> |
| <pathelement location="${src.mail}"/> |
| <pathelement location="${src.monitor.components}"/> |
| <pathelement location="${src.monitor.model}"/> |
| <pathelement location="${src.jms}"/> |
| <pathelement location="${src.native}"/> |
| <pathelement location="${src.mongodb}"/> |
| <pathelement location="${src.report}"/> |
| </path> |
| |
| <!-- Temporary build directories: where the .class live --> |
| <property name="build.dir" value="build"/> |
| <property name="build.core" value="build/core"/> |
| <property name="build.http" value="build/protocol/http"/> |
| <property name="build.ftp" value="build/protocol/ftp"/> |
| <property name="build.jdbc" value="build/protocol/jdbc"/> |
| <property name="build.java" value="build/protocol/java"/> |
| <property name="build.junit" value="build/junit"/> |
| <property name="build.components" value="build/components"/> |
| <property name="build.functions" value="build/functions"/> |
| <property name="build.jorphan" value="build/jorphan"/> |
| <property name="build.ldap" value="build/protocol/ldap"/> |
| <property name="build.mail" value="build/protocol/mail"/> |
| <property name="build.tcp" value="build/protocol/tcp"/> |
| <property name="build.examples" value="build/examples"/> |
| <property name="build.monitor.components" value="build/monitor/components"/> |
| <property name="build.monitor.model" value="build/monitor/model"/> |
| <property name="build.jms" value="build/protocol/jms"/> |
| <property name="build.native" value="build/protocol/native"/> |
| <property name="build.mongodb" value="build/protocol/mongodb"/> |
| <property name="build.report" value="build/reports"/> |
| <property name="build.test" value="build/test"/> |
| <property name="build.res" value="build/res"/> |
| |
| <!-- Path prefix to allow Anakia to find stylesheets if running under Eclipse --> |
| <!-- |
| Anakia looks for stylesheets relative to the java launch directory. |
| Use the External Tools properties page to define the variable |
| as the relative path to the directory where this build file is found. |
| For example: |
| eclipse.anakia=workspace/jmeter |
| |
| An alternative is to define it as a command-line argument on the Main page; |
| this allows one to use a macro name, so is more portable. |
| For example: |
| -Declipse.anakia=workspace/${project_name} |
| WARNING: you must ensure that you have selected a file or directory in |
| the Navigator pane before attempting to run the build, or Eclipse will |
| complain that it cannot resolve the variable name, and it can mark the |
| launch configuration as having failed. |
| --> |
| <property name="eclipse.anakia" value="."/> |
| |
| <!-- Where the build result .jars will be placed --> |
| <property name="dest.jar" value="lib/ext"/> |
| <property name="dest.jar.jmeter" value="bin"/> |
| |
| <!-- Where the API documentation lives --> |
| <property name="dest.docs.api" value="docs/api"/> |
| |
| <!-- Where the doc results live --> |
| <property name="dest.docs" value="docs"/> |
| <property name="dest.printable_docs" value="printable_docs"/> |
| |
| <!-- Default is for Anakia to only rebuild if the target file is older than the source --> |
| <property name="anakia.lastModifiedCheck" value="true"/> |
| |
| <!-- Directory where jars needed for creating documentation live --> |
| <property name="lib.doc" value="lib/doc"/> |
| |
| <!-- Directory where these 3rd party libraries live --> |
| <property name="lib.dir" value="lib"/> |
| |
| <!-- Directory where API spec libraries live --> |
| <property name="lib.api" value="lib/api"/> |
| |
| <!-- Directory where Optional 3rd party libraries live --> |
| <property name="lib.opt" value="lib/opt"/> |
| |
| <!-- Other stuff --> |
| <property name="extras.dir" value="extras"/> |
| |
| <!-- Some resources to add to jars --> |
| <property name="res.dir" value="res"/> |
| |
| <!-- Where the distribution packages will be created --> |
| <property name="dist.dir" value="dist"/> |
| |
| <!-- Where the Maven artifacts will be created --> |
| <property name="maven.dir" value="${dist.dir}/maven"/> |
| |
| <!-- Where the Maven template poms are located --> |
| <property name="maven.poms" value="res/maven"/> |
| |
| <!-- Compilation parameters --> |
| <property name="optimize" value="on"/> |
| <property name="deprecation" value="off"/> |
| <property name="target.java.version" value="1.6"/> |
| <property name="src.java.version" value="1.6"/> |
| <property name="encoding" value="UTF-8"/> |
| <!-- Set test encoding to the same default, but allow override --> |
| <property name="test.encoding" value="${encoding}"/> |
| <!-- Set javadoc encoding to the same default, but allow override --> |
| <property name="javadoc.encoding" value="${encoding}"/> |
| <property name="includeAntRuntime" value="false"/> |
| |
| <!-- 3rd party libraries to be included in the binary distribution --> |
| <property file="build.properties"/> <!-- defines the library version numbers --> |
| |
| <property name="resources.meta-inf" value="${build.res}/META-INF"/> |
| |
| <patternset id="external.jars.notices"> |
| <include name="LICENSE"/> |
| <include name="NOTICE"/> |
| <include name="README"/> |
| </patternset> |
| |
| <!-- Jars for binary release --> |
| <patternset id="external.jars"> |
| <include name="${lib.dir}/${apache-bsf.jar}"/> |
| <include name="${lib.dir}/${avalon-framework.jar}"/> |
| <include name="${lib.dir}/${beanshell.jar}"/> |
| <include name="${lib.dir}/${commons-codec.jar}"/> |
| <include name="${lib.dir}/${commons-collections.jar}"/> |
| <include name="${lib.dir}/${commons-httpclient.jar}"/> |
| <include name="${lib.dir}/${commons-io.jar}"/> |
| <include name="${lib.dir}/${commons-jexl.jar}"/> |
| <include name="${lib.dir}/${commons-jexl2.jar}"/> |
| <include name="${lib.dir}/${commons-lang3.jar}"/> |
| <include name="${lib.dir}/${commons-logging.jar}"/> |
| <include name="${lib.dir}/${commons-net.jar}"/> |
| <include name="${lib.dir}/${excalibur-datasource.jar}"/> |
| <include name="${lib.dir}/${excalibur-instrument.jar}"/> |
| <include name="${lib.dir}/${excalibur-logger.jar}"/> |
| <include name="${lib.dir}/${excalibur-pool.jar}"/> |
| <include name="${lib.dir}/${htmllexer.jar}"/> |
| <include name="${lib.dir}/${htmlparser.jar}"/> |
| <include name="${lib.dir}/${httpclient.jar}"/> |
| <include name="${lib.dir}/${httpcore.jar}"/> |
| <include name="${lib.dir}/${httpmime.jar}"/> |
| <include name="${lib.dir}/${jakarta-oro.jar}"/> |
| <include name="${lib.dir}/${javamail.jar}"/> |
| <include name="${lib.dir}/${jcharts.jar}"/> |
| <include name="${lib.dir}/${jdom.jar}"/> |
| <include name="${lib.dir}/${jms.jar}"/> |
| <include name="${lib.dir}/${rhino.jar}"/> |
| <include name="${lib.dir}/${jodd-core.jar}"/> |
| <include name="${lib.dir}/${jodd-lagarto.jar}"/> |
| <include name="${lib.dir}/${jsoup.jar}"/> |
| <include name="${lib.dir}/${junit.jar}"/> |
| <include name="${lib.dir}/${logkit.jar}"/> |
| <include name="${lib.dir}/${mongo-java-driver.jar}"/> |
| <include name="${lib.dir}/${rsyntaxtextarea.jar}"/> |
| <include name="${lib.dir}/${serializer.jar}"/> |
| <include name="${lib.dir}/${slf4j-api.jar}"/> |
| <include name="${lib.dir}/${slf4j-nop.jar}"/> |
| <include name="${lib.dir}/${soap.jar}"/> |
| <include name="${lib.dir}/${jtidy.jar}"/> |
| <include name="${lib.dir}/${tika-core.jar}"/> |
| <include name="${lib.dir}/${tika-parsers.jar}"/> |
| <include name="${lib.dir}/${xalan.jar}"/> |
| <include name="${lib.dir}/${xerces.jar}"/> |
| <include name="${lib.dir}/${xml-apis.jar}"/> |
| <include name="${lib.dir}/${xmlgraphics-commons.jar}"/> |
| <include name="${lib.dir}/${xmlpull.jar}"/> |
| <include name="${lib.dir}/${xpp3.jar}"/> |
| <include name="${lib.dir}/${xstream.jar}"/> |
| </patternset> |
| |
| <!-- |
| Optional jars, not included in distribution. |
| Any such jars need to be downloaded separately. |
| These can be put into ${lib.dir} or ${lib.opt} |
| - both of these are included in the build classpath |
| |
| Any jars put into ${lib.dir} will be included in |
| the classpath used by JMeter to load classes. |
| Jars in ${lib.opt} are NOT normally included by JMeter. |
| |
| Placing an optional jar in ${lib.opt} means that it |
| will be included in the build classpath, but it will |
| not be included in the runtime classpath. This is intended |
| for testing JMeter without the optional Jar file(s). |
| --> |
| |
| <!-- Build classpath (includes the optional jar directory) --> |
| <path id="classpath"> |
| <!-- Externally produced jars --> |
| <pathelement location="${lib.dir}/${apache-bsf.jar}"/> |
| <pathelement location="${lib.dir}/${avalon-framework.jar}"/> |
| <pathelement location="${lib.dir}/${beanshell.jar}"/> |
| <pathelement location="${lib.dir}/${commons-codec.jar}"/> |
| <pathelement location="${lib.dir}/${commons-collections.jar}"/> |
| <pathelement location="${lib.dir}/${commons-httpclient.jar}"/> |
| <pathelement location="${lib.dir}/${commons-io.jar}"/> |
| <pathelement location="${lib.dir}/${commons-jexl.jar}"/> |
| <pathelement location="${lib.dir}/${commons-jexl2.jar}"/> |
| <pathelement location="${lib.dir}/${commons-lang3.jar}"/> |
| <pathelement location="${lib.dir}/${commons-logging.jar}"/> |
| <pathelement location="${lib.dir}/${commons-net.jar}"/> |
| <pathelement location="${lib.dir}/${excalibur-datasource.jar}"/> |
| <pathelement location="${lib.dir}/${excalibur-instrument.jar}"/> |
| <pathelement location="${lib.dir}/${excalibur-logger.jar}"/> |
| <pathelement location="${lib.dir}/${excalibur-pool.jar}"/> |
| <pathelement location="${lib.dir}/${htmllexer.jar}"/> |
| <pathelement location="${lib.dir}/${htmlparser.jar}"/> |
| <pathelement location="${lib.dir}/${httpclient.jar}"/> |
| <pathelement location="${lib.dir}/${httpcore.jar}"/> |
| <pathelement location="${lib.dir}/${httpmime.jar}"/> |
| <pathelement location="${lib.dir}/${jakarta-oro.jar}"/> |
| <pathelement location="${lib.dir}/${javamail.jar}"/> |
| <pathelement location="${lib.dir}/${jcharts.jar}"/> |
| <pathelement location="${lib.dir}/${jdom.jar}"/> |
| <pathelement location="${lib.dir}/${jms.jar}"/> |
| <pathelement location="${lib.dir}/${rhino.jar}"/> |
| <pathelement location="${lib.dir}/${jodd-core.jar}"/> |
| <pathelement location="${lib.dir}/${jodd-lagarto.jar}"/> |
| <pathelement location="${lib.dir}/${jsoup.jar}"/> |
| <pathelement location="${lib.dir}/${junit.jar}"/> |
| <pathelement location="${lib.dir}/${logkit.jar}"/> |
| <pathelement location="${lib.dir}/${mongo-java-driver.jar}"/> |
| <pathelement location="${lib.dir}/${rsyntaxtextarea.jar}"/> |
| <pathelement location="${lib.dir}/${serializer.jar}"/> |
| <pathelement location="${lib.dir}/${slf4j-api.jar}"/> |
| <pathelement location="${lib.dir}/${slf4j-nop.jar}"/> |
| <pathelement location="${lib.dir}/${soap.jar}"/> |
| <pathelement location="${lib.dir}/${jtidy.jar}"/> |
| <pathelement location="${lib.dir}/${tika-core.jar}"/> |
| <pathelement location="${lib.dir}/${tika-parsers.jar}"/> |
| <pathelement location="${lib.dir}/${xalan.jar}"/> |
| <pathelement location="${lib.dir}/${xerces.jar}"/> |
| <pathelement location="${lib.dir}/${xml-apis.jar}"/> |
| <pathelement location="${lib.dir}/${xmlgraphics-commons.jar}"/> |
| <pathelement location="${lib.dir}/${xmlpull.jar}"/> |
| <pathelement location="${lib.dir}/${xpp3.jar}"/> |
| <pathelement location="${lib.dir}/${xstream.jar}"/> |
| <!-- Generated jars --> |
| <fileset dir="${lib.dir}" includes="jorphan.jar"/> |
| <!-- API-only jars--> |
| <fileset dir="${lib.api}" includes="*.jar"/> |
| <!-- Optional jars --> |
| <fileset dir="${lib.opt}" includes="*.jar"/> |
| </path> |
| |
| <!-- Anakia classpath --> |
| <path id="anakia.classpath"> |
| <pathelement location="${lib.doc}/${velocity.jar}"/> |
| <pathelement location="${lib.dir}/${jdom.jar}"/> |
| <pathelement location="${lib.dir}/${commons-collections.jar}"/> |
| <pathelement location="${lib.doc}/${commons-lang.jar}"/> |
| <pathelement location="${lib.dir}/${logkit.jar}"/> |
| </path> |
| |
| <!-- Version info filter set --> |
| <tstamp> |
| <format property="year" pattern="yyyy" locale="en"/> |
| </tstamp> |
| |
| <filterset id="version.filters"> |
| <filter token="YEAR" value="${year}"/> |
| </filterset> |
| |
| <target name="init-version"> |
| <tstamp/> |
| <!-- |
| JMeter version |
| This is overridden for formal releases. |
| --> |
| <property name="jmeter.version" value="2.10"/> |
| <!-- Remember to change "docversion" below if necessary --> |
| <condition property="implementation.version" |
| value="${jmeter.version} r${svn.revision}" else="${jmeter.version}.${DSTAMP}"> |
| <isset property="svn.revision"/> |
| </condition> |
| <property name="display.version" value="${implementation.version}"/> |
| <echo level="info">jmeter.version = ${jmeter.version}</echo> |
| <echo level="info">display.version = ${display.version}</echo> |
| <echo level="info">implementation.version = ${implementation.version}</echo> |
| </target> |
| |
| <!-- JMeter Javadoc version (own variable is used so can be overriden independently) --> |
| <property name="docversion" value="${jmeter.version}"/> |
| |
| <!-- Get version from SVN status --> |
| <target name="init-svnVersion" depends="svnCheck"> |
| <fail message="Could not get SVN revision" unless="svn.revision"/> |
| <property name="jmeter.version" value="r${svn.revision}"/> |
| <!-- Copy the value to avoid duplication of revision in Manifests --> |
| <property name="implementation.version" value="${jmeter.version}"/> |
| <property name="display.version" value="${jmeter.version}"/> |
| <echo level="info">svn.revision = ${svn.revision}</echo> |
| <echo level="info">jmeter.version = ${jmeter.version}</echo> |
| <echo level="info">display.version = ${display.version}</echo> |
| <echo level="info">implementation.version = ${implementation.version}</echo> |
| </target> |
| |
| |
| <target name="init-docs" depends="report-anakia-missing"> |
| <echo level="info">eclipse.anakia = ${eclipse.anakia}</echo> |
| </target> |
| |
| <!-- |
| - Check for anakia task |
| --> |
| <target name="check-anakia"> |
| <available classpathref="anakia.classpath" classname="org.apache.velocity.anakia.AnakiaTask" property="AnakiaTask.present"/> |
| <!-- Check for Velocity version 1.5 --> |
| <available classpathref="anakia.classpath" classname="org.apache.velocity.io.UnicodeInputStream" property="velocity.version.15"/> |
| <antcall target="report-old-velocity"></antcall> |
| </target> |
| |
| <target name="report-anakia-missing" depends="check-anakia" unless="AnakiaTask.present"> |
| <echo> |
| AnakiaTask is not present, documentation will not be generated. |
| </echo> |
| </target> |
| |
| <target name="report-old-velocity" unless="velocity.version.15" if="AnakiaTask.present"> |
| <echo> |
| Velocity version appears to be older than 1.5: the documentation may be generated with incorrect line endings. |
| </echo> |
| </target> |
| |
| <target name="compile-core" depends="compile-jorphan" description="Compile JMeter core classes."> |
| <mkdir dir="${build.core}"/> |
| <javac srcdir="${src.core}" destdir="${build.core}" optimize="${optimize}" source="${src.java.version}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-components" depends="compile-jorphan,compile-core" description="Compile generic (protocol-independent) components."> |
| <mkdir dir="${build.components}"/> |
| <javac srcdir="${src.components}" destdir="${build.components}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-functions" depends="compile-jorphan,compile-core" description="Compile functions."> |
| <mkdir dir="${build.functions}"/> |
| <javac srcdir="${src.functions}" destdir="${build.functions}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-http" depends="compile-jorphan,compile-core,compile-components" description="Compile components specific to HTTP sampling."> |
| <mkdir dir="${build.http}"/> |
| <!-- Directory needs to exist, or jar will fail --> |
| <javac srcdir="${src.http}" destdir="${build.http}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <pathelement location="${build.components}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-tests" description="Compile test components only"> |
| <mkdir dir="${build.test}"/> |
| <javac srcdir="${src.test}" destdir="${build.test}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <pathelement location="${build.components}"/> |
| <pathelement location="${build.http}"/> |
| <pathelement location="${build.ftp}"/> |
| <pathelement location="${build.functions}"/> |
| <pathelement location="${build.java}"/> |
| <pathelement location="${build.jdbc}"/> |
| <pathelement location="${build.ldap}"/> |
| <pathelement location="${build.mail}"/> |
| <pathelement location="${build.monitor.components}"/> |
| <pathelement location="${build.monitor.model}"/> |
| <pathelement location="${build.report}"/> |
| <pathelement location="${build.tcp}"/> |
| <!-- Also include compiled jars to allow running tests without rebuilding source --> |
| <fileset dir="${dest.jar}" includes="*.jar"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-ftp" depends="compile-jorphan,compile-core" description="Compile components specific to FTP sampling."> |
| <mkdir dir="${build.ftp}"/> |
| <javac srcdir="${src.ftp}" destdir="${build.ftp}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-jdbc" depends="compile-jorphan,compile-core" description="Compile components specific to JDBC sampling."> |
| <mkdir dir="${build.jdbc}"/> |
| <javac srcdir="${src.jdbc}" destdir="${build.jdbc}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-ldap" depends="compile-jorphan,compile-core" |
| description="Compile components specific to LDAP sampling."> |
| <mkdir dir="${build.ldap}"/> |
| <javac srcdir="${src.ldap}" destdir="${build.ldap}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="create-mail-dir"> |
| <mkdir dir="${build.mail}"/> |
| </target> |
| |
| <target name="compile-mail" depends="compile-jorphan,compile-core,create-mail-dir" |
| description="Compile components specific to IMAP and POP3 sampling."> |
| <javac srcdir="${src.mail}" destdir="${build.mail}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-java" depends="compile-jorphan,compile-core" description="Compile components specific to Java sampling."> |
| <mkdir dir="${build.java}"/> |
| <javac srcdir="${src.java}" destdir="${build.java}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-junit" depends="compile-jorphan,compile-core" description="Compile components specific to JUnit sampling."> |
| <mkdir dir="${build.junit}"/> |
| <javac srcdir="${src.junit}" destdir="${build.junit}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-report" depends="compile-jorphan,compile-core,compile-components" |
| description="Compile report components."> |
| <mkdir dir="${build.report}"/> |
| <javac srcdir="${src.report}" destdir="${build.report}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <pathelement location="${build.components}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-tcp" depends="compile-jorphan,compile-core" description="Compile components specific to TCP sampling."> |
| <mkdir dir="${build.tcp}"/> |
| <javac srcdir="${src.tcp}" destdir="${build.tcp}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-protocols" depends="compile-http,compile-ftp,compile-jdbc,compile-java,compile-ldap,compile-mail,compile-tcp" description="Compile all protocol-specific components."/> |
| |
| <target name="compile-examples" depends="compile-jorphan,compile-core" description="Compile example components."> |
| <mkdir dir="${build.examples}"/> |
| <javac srcdir="${src.examples}" destdir="${build.examples}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-monitor" depends="compile-monitor-model,compile-monitor-components"/> |
| |
| <target name="compile-monitor-components" |
| depends="compile-jorphan,compile-core,compile-components,compile-monitor-model"> |
| <mkdir dir="${build.monitor.components}"/> |
| <javac srcdir="${src.monitor.components}" source="${src.java.version}" destdir="${build.monitor.components}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.monitor.model}"/> |
| <pathelement location="${build.http}"/> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <pathelement location="${build.components}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-monitor-model" depends="compile-jorphan,compile-core"> |
| <mkdir dir="${build.monitor.model}"/> |
| <javac srcdir="${src.monitor.model}" destdir="${build.monitor.model}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-jorphan" depends="init-version" description="Compile JOrphan utility classes."> |
| <mkdir dir="${build.jorphan}"/> |
| <javac srcdir="${src.jorphan}" destdir="${build.jorphan}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-rmi" depends="compile-jorphan,compile-core" description="Compile RMI stubs and skeletons."> |
| <rmic base="${build.core}" classname="org.apache.jmeter.engine.RemoteJMeterEngineImpl"> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </rmic> |
| <rmic base="${build.core}" classname="org.apache.jmeter.samplers.RemoteSampleListenerImpl"> |
| <classpath> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </rmic> |
| <rmic base="${build.core}" classname="org.apache.jmeter.threads.RemoteThreadsListenerImpl"> |
| <classpath> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </rmic> |
| </target> |
| |
| <target name="compile-jms" depends="compile-jorphan,compile-core,compile-components" |
| description="Compile components specific to JMS sampling."> |
| <mkdir dir="${build.jms}"/> |
| <javac srcdir="${src.jms}" destdir="${build.jms}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-native" depends="compile-jorphan,compile-core,compile-components" |
| description="Compile components specific to Native sampling."> |
| <mkdir dir="${build.native}"/> |
| <javac srcdir="${src.native}" destdir="${build.native}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile-mongodb" depends="compile-jorphan,compile-core,compile-components" |
| description="Compile components specific to MongoDB sampling."> |
| <mkdir dir="${build.mongodb}"/> |
| <javac srcdir="${src.mongodb}" destdir="${build.mongodb}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}" |
| includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}"> |
| <include name="**/*.java"/> |
| <classpath> |
| <pathelement location="${build.jorphan}"/> |
| <pathelement location="${build.core}"/> |
| <path refid="classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="compile" |
| depends="_message_3rdParty,compile-core,compile-components,compile-functions,compile-protocols,compile-rmi,compile-monitor,compile-junit,compile-jms,compile-native, compile-mongodb, compile-report" |
| description="Compile everything."/> |
| |
| <target name="run_gui" depends="package" description="Run the JMeter GUI off the jar files"> |
| <java classname="org.apache.jmeter.NewDriver" fork="true"> |
| <classpath> |
| <pathelement location="${dest.jar.jmeter}/ApacheJMeter.jar"/> |
| <path refid="classpath"/> |
| </classpath> |
| <sysproperty key="jmeter.home" value="${basedir}"/> |
| </java> |
| </target> |
| |
| <target name="package" depends="compile, prepare-resources, package-only" |
| description="Compile everything and create the jars"/> |
| |
| <target name="prepare-resources" |
| description="Prepare some resources files, update date"> |
| <mkdir dir="${build.res}" /> |
| <mkdir dir="${resources.meta-inf}" /> |
| <copy todir="${resources.meta-inf}" overwrite="yes" filtering="yes" |
| encoding="${encoding}"> |
| <filterset refid="version.filters"/> |
| <fileset dir="${res.dir}/META-INF" > |
| <include name="*.license" /> |
| <include name="*.notice" /> |
| </fileset> |
| </copy> |
| <fixcrlf encoding="${encoding}" srcdir="${resources.meta-inf}" eol="crlf" includes="*.license *.notice"/> |
| </target> |
| |
| <!-- |
| N.B. Eclipse (and perhaps other Java IDEs) copies all files to the build directory, unless |
| told otherwise. This means that there might be copies of property and image files in the |
| build directory. To avoid including the files twice in the jar file, we include only .class |
| files in the list of files to be processed from the build tree. |
| |
| Eclipse has been fixed so that it no longer shows files in the build tree in the Open Resource dialogue, |
| so having duplicates in the build tree no longer causes confusion. |
| |
| Note: if built from Eclipse, the build directory will include resources and images, |
| and Eclipse will thus be able to run JMeter from the default path. |
| |
| If built using Ant, the build tree will not contain any resources, and thus Eclipse will not be able to |
| run JMeter unless all the JMeter jars are added. |
| |
| --> |
| <target name="package-only" description="Package already-compiled classes (shortcut for IDE users)"> |
| <manifest file="${build.dir}/MANIFEST_BIN.MF"> |
| <attribute name="Built-By" value="${user.name}"/> |
| <attribute name="Extension-Name" value=" JMeter"/> |
| <attribute name="Specification-Title" value=" Apache JMeter"/> |
| <attribute name="Specification-Vendor" value=" Apache Software Foundation"/> |
| <attribute name="Implementation-Vendor" value=" Apache Software Foundation"/> |
| <attribute name="Implementation-Vendor-Id" value=" org.apache"/> |
| <attribute name="Implementation-Version" value="${implementation.version}"/> |
| <attribute name="X-Compile-Source-JDK" value="${src.java.version}"/> |
| <attribute name="X-Compile-Target-JDK" value="${target.java.version}"/> |
| </manifest> |
| |
| <manifest file="${build.dir}/MANIFEST_SRC.MF"> |
| <attribute name="Built-By" value="${user.name}"/> |
| <attribute name="Extension-Name" value=" JMeter"/> |
| <attribute name="Specification-Title" value=" Apache JMeter"/> |
| <attribute name="Specification-Vendor" value=" Apache Software Foundation"/> |
| <attribute name="Implementation-Vendor" value=" Apache Software Foundation"/> |
| <attribute name="Implementation-Vendor-Id" value=" org.apache"/> |
| <attribute name="Implementation-Version" value="${implementation.version}"/> |
| </manifest> |
| |
| <mkdir dir="${dest.jar}"/> |
| |
| <!-- perhaps ought to include a basic jmeter.properties file in one of the jars, |
| given that JMeterUtils looks for it if it cannot find the external one |
| - otherwise, change utils to ignore it --> |
| |
| <!-- JMeter launch jar --> |
| <jar jarfile="${dest.jar.jmeter}/ApacheJMeter.jar" |
| includes="**/NewDriver*,**/DynamicClassLoader*,**/ShutdownClient.class" |
| basedir="${build.core}" |
| manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <manifest> |
| <attribute name="Main-Class" value="org.apache.jmeter.NewDriver"/> |
| </manifest> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| </jar> |
| |
| <!-- core --> |
| <jar jarfile="${dest.jar}/ApacheJMeter_core.jar" |
| manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <!-- add license details for images --> |
| <zipfileset file="licenses/src/openiconlibrary.txt" |
| fullpath="META-INF/LICENSE-openiconlibrary.txt" /> |
| <!-- Only include class files from build tree - see above --> |
| <fileset dir="${build.core}" includes="**/*.class" |
| excludes="**/BeanShellClient*.class,**/NewDriver*,**/DynamicClassLoader*"/> |
| <fileset dir="${src.core}" includes="org/apache/jmeter/images/**" |
| excludes="**/*.properties"/> |
| <fileset dir="${src.core}" includes="**/*.properties"> |
| <exclude name="*eucJP*"/> |
| </fileset> |
| <!-- This file is used by the jmeter -h option --> |
| <fileset dir="${src.core}" includes="org/apache/jmeter/help.txt"/> |
| </jar> |
| |
| <!-- components --> |
| <jar jarfile="${dest.jar}/ApacheJMeter_components.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.components}" includes="**/*.class" /> |
| <fileset dir="${src.components}" includes="**/*.properties" /> |
| </jar> |
| |
| <!-- functions --> |
| <jar jarfile="${dest.jar}/ApacheJMeter_functions.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.functions}" includes="**/*.class" /> |
| <fileset dir="${src.functions}" includes="**/*.properties" /> |
| </jar> |
| |
| <!-- http --> |
| <jar jarfile="${dest.jar}/ApacheJMeter_http.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.http}" includes="**/*.class"/> |
| <fileset dir="${src.http}" includes="**/*.properties" /> |
| </jar> |
| |
| <!-- ftp --> |
| <jar jarfile="${dest.jar}/ApacheJMeter_ftp.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.ftp}" includes="**/*.class" /> |
| <fileset dir="${src.ftp}" includes="**/*.properties" /> |
| </jar> |
| |
| <!-- jdbc --> |
| <jar jarfile="${dest.jar}/ApacheJMeter_jdbc.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.jdbc}" includes="**/*.class" /> |
| <fileset dir="${src.jdbc}" includes="**/*.properties" /> |
| </jar> |
| |
| <!-- java --> |
| <jar jarfile="${dest.jar}/ApacheJMeter_java.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.java}" includes="**/*.class" /> |
| <fileset dir="${src.java}" includes="**/*.properties" /> |
| </jar> |
| |
| <!-- BeanShell Client --> |
| <jar jarfile="${lib.dir}/bshclient.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <manifest> |
| <attribute name="Main-Class" value="org.apache.jmeter.util.BeanShellClient"/> |
| </manifest> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.core}" includes="**/BeanShellClient*.class" /> |
| </jar> |
| |
| <!-- junit --> |
| <jar jarfile="${dest.jar}/ApacheJMeter_junit.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.junit}" includes="org/**/*.class" /> |
| <fileset dir="${src.junit}" includes="**/*.properties" /> |
| </jar> |
| |
| <!-- Build junit/test.jar sample --> |
| <jar jarfile="${lib.dir}/junit/test.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.junit}" excludes="org/**/*" /> |
| <fileset dir="${src.junit}" excludes="org/**/*" /> |
| </jar> |
| |
| <!-- report --> |
| <jar jarfile="${dest.jar}/ApacheJMeter_report.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.report}" includes="**/*.class" /> |
| <fileset dir="${src.report}" includes="**/*.properties" /> |
| </jar> |
| |
| <!-- ldap --> |
| <jar jarfile="${dest.jar}/ApacheJMeter_ldap.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.ldap}" includes="**/*.class" /> |
| <fileset dir="${src.ldap}" includes="**/*.properties" /> |
| </jar> |
| |
| <!-- mail --> |
| <jar jarfile="${dest.jar}/ApacheJMeter_mail.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.mail}" includes="**/*.class" /> |
| <fileset dir="${src.mail}" includes="**/*.properties" /> |
| <fileset dir="${src.mail}" includes="**/*.providers" /> |
| </jar> |
| |
| <!-- tcp --> |
| <jar jarfile="${dest.jar}/ApacheJMeter_tcp.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.tcp}" includes="**/*.class" /> |
| <fileset dir="${src.tcp}" includes="**/*.properties" /> |
| </jar> |
| |
| <!-- monitor --> |
| <jar jarfile="${dest.jar}/ApacheJMeter_monitors.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.monitor.model}" includes="**/*.class" /> |
| <fileset dir="${build.monitor.components}" includes="**/*.class" /> |
| </jar> |
| |
| <!-- jms --> |
| <!-- Ensure that build dir exists, even if JMS has not been built --> |
| <mkdir dir="${build.jms}"/> |
| <jar jarfile="${dest.jar}/ApacheJMeter_jms.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.jms}" includes="**/*.class" /> |
| <fileset dir="${src.jms}" includes="**/*.properties" /> |
| </jar> |
| |
| <!-- native --> |
| <!-- Ensure that build dir exists, even if Native has not been built --> |
| <mkdir dir="${build.native}"/> |
| <jar jarfile="${dest.jar}/ApacheJMeter_native.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.native}" includes="**/*.class" /> |
| <fileset dir="${src.native}" includes="**/*.properties" /> |
| </jar> |
| |
| <!-- mongodb --> |
| <!-- Ensure that build dir exists, even if MongoDB has not been built --> |
| <mkdir dir="${build.mongodb}"/> |
| <jar jarfile="${dest.jar}/ApacheJMeter_mongodb.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.mongodb}" includes="**/*.class" /> |
| <fileset dir="${src.mongodb}" includes="**/*.properties" /> |
| </jar> |
| |
| <jar jarfile="${lib.dir}/jorphan.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.jorphan}" includes="**/*.class"/> |
| <fileset dir="${src.jorphan}" includes="**/*.properties"/> |
| </jar> |
| </target> |
| |
| <!-- Check the Ant version --> |
| <available property="Ant-1.8.0-or-later" classname="org.apache.tools.ant.taskdefs.Local"/> |
| <fail message="This build requires Ant 1.8.0 or later" unless="Ant-1.8.0-or-later"/> |
| |
| <!-- Check that the 3rd party libraries are present --> |
| <target name="_check_3rdparty"> |
| <condition property="3rdparty.present"> |
| <and> |
| <!-- No need to check all jars; just check a few --> |
| <available classpathref="classpath" classname="org.apache.bsf.BSFEngine"/> |
| <available classpathref="classpath" classname="org.htmlparser.Parser"/> |
| <available classpathref="classpath" classname="com.thoughtworks.xstream.XStream"/> |
| </and> |
| </condition> |
| </target> |
| |
| <target name="_message_3rdParty" depends="_check_3rdparty" unless="3rdparty.present"> |
| <echo>Cannot find all the required 3rd party libraries.</echo> |
| <echo>If building from a release, you can get most of them from the binary archive.</echo> |
| <echo>Use "ant download_jars" to download any missing jars.</echo> |
| <fail message="Cannot find required classes"/> |
| </target> |
| |
| <target name="install" depends="package" description="Install JMeter. (Compiles code and creates jars)"> |
| <fixcrlf encoding="${encoding}" srcdir="." eol="lf" includes="bin/*.sh bin/jmeter bin/jmeter-server bin/jmeter-report"/> |
| </target> |
| |
| <target name="install-examples" depends="compile-examples" description="Build and installs the example components."> |
| <jar jarfile="${dest.jar}/ApacheJMeter_examples.jar" manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.examples}" includes="**/*.class" /> |
| <fileset dir="${src.examples}" includes="**/*.properties" /> |
| </jar> |
| </target> |
| |
| <!-- lists of files needed for a binary distribution (excluding library files) --> |
| <!-- Source files also needed at runtime --> |
| <patternset id="dist.common.native"> |
| <include name="${dest.jar.jmeter}/BeanShell*.bshrc"/> |
| <include name="${dest.jar.jmeter}/jaas.conf"/> |
| <include name="${dest.jar.jmeter}/krb5.conf"/> |
| <include name="${dest.jar.jmeter}/hc.parameters"/> |
| <include name="${dest.jar.jmeter}/jmeter.properties"/> |
| <include name="${dest.jar.jmeter}/log4j.conf"/> |
| <include name="${dest.jar.jmeter}/logkit.xml"/> |
| <include name="${dest.jar.jmeter}/upgrade.properties"/> |
| <include name="${dest.jar.jmeter}/saveservice.properties"/> |
| <include name="${dest.jar.jmeter}/users.dtd"/> |
| <include name="${dest.jar.jmeter}/users.xml"/> |
| <!-- Sample override properties files --> |
| <include name="${dest.jar.jmeter}/httpclient.parameters"/> |
| <include name="${dest.jar.jmeter}/system.properties"/> |
| <include name="${dest.jar.jmeter}/user.properties"/> |
| <!-- Exclude any files that might be present from testing the release --> |
| <exclude name="${dest.jar.jmeter}/*.log"/> |
| <include name="${dest.jar.jmeter}/examples/**"/> |
| <!-- JMX files are in the non-native section --> |
| <exclude name="${dest.jar.jmeter}/examples/*.jmx"/> |
| <include name="${extras.dir}/**"/> |
| <!-- Binary file types --> |
| <exclude name="${extras.dir}/*.jar"/> |
| <exclude name="${extras.dir}/*.jpg"/> |
| <exclude name="${extras.dir}/*.png"/> |
| <!-- File types that need to retain their EOL setting --> |
| <exclude name="${extras.dir}/*.jmx"/> |
| <exclude name="${extras.dir}/*.cmd"/> |
| <exclude name="${extras.dir}/*.sh"/> |
| </patternset> |
| |
| <patternset id="dist.binaries.native"> |
| <include name="LICENSE"/> |
| <include name="licenses/**"/> |
| <include name="NOTICE"/> |
| <include name="README"/> |
| <patternset refid="dist.common.native"/> |
| <!-- Help documentation --> |
| <include name="${dest.printable_docs}/**"/> |
| <!-- Binary file types --> |
| <exclude name="${dest.printable_docs}/**/*.pdf"/> |
| <exclude name="${dest.printable_docs}/**/*.jmx"/> |
| <!-- We also need the shared CSS for the printable docs --> |
| <include name="${dest.docs}/css/**"/> |
| </patternset> |
| |
| <!-- Source files also needed at runtime --> |
| <patternset id="dist.common.non.native"> |
| <include name="${dest.jar.jmeter}/heapdump.*"/> |
| <include name="${dest.jar.jmeter}/jmeter*"/> |
| <exclude name="${dest.jar.jmeter}/jmeter.properties"/> |
| <include name="${dest.jar.jmeter}/mirror-server.*"/> |
| <include name="${dest.jar.jmeter}/shutdown.*"/> |
| <include name="${dest.jar.jmeter}/stoptest.*"/> |
| <!-- Fake SSL cert for JMeter proxy recorder in https --> |
| <include name="${dest.jar.jmeter}/proxyserver.jks"/> |
| <!-- Exclude any files that might be present from testing the release --> |
| <exclude name="${dest.jar.jmeter}/*.log"/> |
| <include name="${dest.jar.jmeter}/templates/*.jmx"/> |
| <include name="${dest.jar.jmeter}/templates/*.xml"/> |
| <include name="${dest.jar.jmeter}/templates/*.dtd"/> |
| <include name="${dest.jar.jmeter}/examples/*.jmx"/> |
| <include name="${extras.dir}/*.jar"/> |
| <include name="${extras.dir}/*.jpg"/> |
| <include name="${extras.dir}/*.png"/> |
| <!-- File types that need to retain their EOL setting --> |
| <include name="${extras.dir}/*.jmx"/> |
| <include name="${extras.dir}/*.cmd"/> |
| <include name="${extras.dir}/*.sh"/> |
| </patternset> |
| |
| <patternset id="dist.binaries.non.native"> |
| <patternset refid="dist.common.non.native"/> |
| <include name="${dest.jar}/"/> |
| <include name="${lib.dir}/bshclient.jar"/> |
| <include name="${lib.dir}/jorphan.jar"/> |
| <include name="${lib.dir}/junit/test.jar"/> |
| <include name="${dest.jar.jmeter}/ApacheJMeter.jar"/> |
| <!-- Help documentation, binary files --> |
| <include name="${dest.printable_docs}/**/*.pdf"/> |
| <include name="${dest.printable_docs}/**/*.jmx"/> |
| <!-- We also need the shared images for the printable docs --> |
| <include name="${dest.docs}/images/**"/> |
| </patternset> |
| |
| <!-- |
| List of Unix executable files in the binary distribution |
| These need special handling to create the correct file mode |
| --> |
| <property name="dist.executables" |
| value="${dest.jar.jmeter}/jmeter ${dest.jar.jmeter}/jmeter-server ${dest.jar.jmeter}/*.sh ${extras.dir}/*.sh"/> |
| |
| <!-- List of files in source distribution that are eol=native --> |
| <!-- |
| N.B. dist.sources[.non].native sets exclude source files present in dist.binaries[.non].native |
| so that the nightly build src archive does not duplicate stuff in the binary archive |
| (This may change, as the overlap does not waste much space) |
| --> |
| <patternset id="dist.sources.native"> |
| <include name="LICENSE"/> |
| <include name="licenses/src/**"/> |
| <include name="NOTICE"/> |
| <include name="README"/> |
| <include name="${src.dir}/**"/> |
| <!-- Exclude binary types --> |
| <exclude name="**/*.gif"/> |
| <exclude name="**/*.jpg"/> |
| <exclude name="**/*.png"/> |
| <include name="${src.docs}/**"/> |
| <!-- Include some resources --> |
| <include name="${res.dir}/**"/> |
| <!-- Exclude binary types (and JMX/JTL, which are not OS-dependent) --> |
| <exclude name="${src.docs}/images/**"/> |
| <exclude name="${src.docs}/**/*.jmx"/> |
| <exclude name="${src.docs}/**/*.odt"/> |
| <exclude name="${src.docs}/**/*.pdf"/> |
| <exclude name="${src.docs}/**/*.sxi"/> |
| <exclude name="${src.docs}/**/*.sxw"/> |
| <include name="${src.test}/**"/> |
| <include name="build.xml"/> |
| <include name="build.properties"/> |
| <include name="${dest.jar.jmeter}/testfiles/**"/> |
| <exclude name="${dest.jar.jmeter}/testfiles/*.jmx"/> |
| <exclude name="${dest.jar.jmeter}/testfiles/*.jtl"/> |
| <!-- These are generated with EOL=LF --> |
| <exclude name="${dest.jar.jmeter}/testfiles/BatchTestLocal.xml"/> |
| <exclude name="${dest.jar.jmeter}/testfiles/Bug*.xml"/> |
| <exclude name="${dest.jar.jmeter}/testfiles/HTMLParserTestFile_2.xml"/> |
| <!-- Ignore unit test output --> |
| <exclude name="${dest.jar.jmeter}/testfiles/*.out"/> |
| <exclude name="${dest.jar.jmeter}/testfiles/Sample_*.png"/> |
| <include name="eclipse.classpath"/> |
| <include name="eclipse.readme"/> |
| <include name="checkstyle.xml"/> |
| <include name="${lib.dir}/aareadme.txt"/> |
| <include name="fb-*.x*"/> |
| <!-- Make sure that the lib/opt directory is included in the archives --> |
| <include name="${lib.opt}/README.txt"/> |
| </patternset> |
| |
| <!-- Non-native items --> |
| <patternset id="dist.sources.non.native"> |
| <include name="${src.dir}/**/*.gif"/> |
| <include name="${src.dir}/**/*.jpg"/> |
| <include name="${src.dir}/**/*.png"/> |
| <include name="${src.docs}/images/**"/> |
| <include name="${src.docs}/**/*.jmx"/> |
| <include name="${src.docs}/**/*.odt"/> |
| <include name="${src.docs}/**/*.pdf"/> |
| <include name="${src.docs}/**/*.sxi"/> |
| <include name="${src.docs}/**/*.sxw"/> |
| <include name="${dest.jar.jmeter}/testfiles/*.jmx"/> |
| <include name="${dest.jar.jmeter}/testfiles/*.jtl"/> |
| <!-- These are generated with EOL=LF --> |
| <include name="${dest.jar.jmeter}/testfiles/BatchTestLocal.xml"/> |
| <include name="${dest.jar.jmeter}/testfiles/Bug*.xml"/> |
| <include name="${dest.jar.jmeter}/testfiles/HTMLParserTestFile_2.xml"/> |
| <!-- Include the image files used in parsing / embedded download tests --> |
| <include name="${dest.jar.jmeter}/testfiles/**/*.gif"/> |
| <include name="${dest.jar.jmeter}/testfiles/**/*.jpg"/> |
| <include name="${dest.jar.jmeter}/testfiles/**/*.png"/> |
| </patternset> |
| |
| <!-- Convert eol:native source files to appropriate format if required --> |
| <target name="_filter" unless="native.${eoltype}"> |
| <property name="workdir" value="${dist.dir}/${eoltype}"/> |
| <echo level="info">Converting work files to eol=${eoltype} in ${workdir}</echo> |
| <mkdir dir="${workdir}"/> |
| <copy includeemptydirs="false" todir="${workdir}" encoding="${encoding}"> |
| <fileset dir="."> |
| <patternset refid="${fileset}"/> |
| </fileset> |
| <filterchain> |
| <fixcrlf encoding="${encoding}" fixlast="false" eol="${eoltype}" srcdir="${workdir}"/> |
| </filterchain> |
| </copy> |
| </target> |
| |
| <!-- Files to be included in full source download --> |
| <patternset id="dist_src_files_native"> |
| <patternset refid="dist.sources.native"/> |
| <patternset refid="dist.common.native"/> |
| </patternset> |
| |
| <patternset id="dist_src_files_non_native"> |
| <patternset refid="dist.sources.non.native"/> |
| <patternset refid="dist.common.non.native"/> |
| </patternset> |
| |
| <!-- Files to be included in full binary download --> |
| <patternset id="dist_bin_files_native"> |
| <patternset refid="dist.binaries.native"/> |
| <patternset refid="external.jars.notices"/> |
| <!-- We don't need the site docs, but we do want Javadoc (e.g. for BeanShell) --> |
| <include name="${dest.docs.api}/**"/> |
| <exclude name="${dest.docs.api}/resources/**"/> |
| </patternset> |
| |
| <patternset id="dist_bin_files_non_native"> |
| <patternset refid="dist.binaries.non.native"/> |
| <patternset refid="external.jars"/> |
| <include name="${dest.docs.api}/resources/**"/> |
| </patternset> |
| |
| <!-- NOTE: the site documents are not included in either archive --> |
| |
| <!-- Invoke with -Djmeter.version=m.n -Duser.name=xyz@apache.org [-Dsvn.revision=nnnnn] [-Ddisplay.version=xxxx] |
| Creates clean build and all documentation |
| Creates runtime and source distributions and site documentation |
| --> |
| <target name="distribution" |
| depends="svnCheck,check-versions,clean,install,docs-printable,docs-api,test,_distribution" |
| description="Build JMeter for end-user distribution"/> |
| |
| <target name="check-versions" unless="disable-check-versions"> |
| <fail message="jmeter.version must be defined" unless="jmeter.version"/> |
| <fail message="svn.revision must be defined" unless="svn.revision"/> |
| <local name="version.match"/> |
| <condition property="version.match"> |
| <resourcecontains resource="${src.core}/org/apache/jmeter/util/JMeterVersion.java" |
| substring='VERSION = "${jmeter.version}";'/> |
| </condition> |
| <fail message="jmeter.version must be same as JMeterVersion.VERSION" unless="version.match"/> |
| </target> |
| |
| <target |
| name="nightly" |
| depends="init-svnVersion,package,docs-printable,pack-nightly" |
| description="Build JMeter for nightly dir (package docs-printable pack-nightly)"/> |
| |
| <target name="_eolcheck"> |
| <!-- Determine if the native format is CRLF or LF (or neither) --> |
| <condition property="native.lf"> |
| <os family="unix"/> |
| </condition> |
| <condition property="native.crlf"> |
| <os family="dos"/> |
| </condition> |
| <!-- Define native.dir.x as either the source or updated directory as appropriate --> |
| <condition property="native.dir.lf" value="." else="${dist.dir}/lf"> |
| <isset property="native.lf"/> |
| </condition> |
| <condition property="native.dir.crlf" value="." else="${dist.dir}/crlf"> |
| <isset property="native.crlf"/> |
| </condition> |
| <echoproperties prefix="native"></echoproperties> |
| </target> |
| |
| <!-- Internal target --> |
| <target name="_distribution" depends="check-versions,_eolcheck,check_jars"> |
| <property name="dist.name" value="apache-jmeter-${jmeter.version}"/> |
| <property name="pack.name" value="${dist.name}"/> |
| <echo level="info">Creating JMeter distribution ${dist.name} ${svn.revision}</echo> |
| <mkdir dir="${dist.dir}"/> |
| |
| <!-- Delete work directories just in case --> |
| <delete dir="${dist.dir}/crlf" quiet="true"/> |
| <delete dir="${dist.dir}/lf" quiet="true"/> |
| |
| <!-- Runtime archives --> |
| <antcall target="_filter"> |
| <param name="eoltype" value="lf"/> |
| <param name="fileset" value="dist_bin_files_native"/> |
| </antcall> |
| |
| <tar destfile="${dist.dir}/${pack.name}.tar" longfile="gnu"> |
| <tarfileset dir="." prefix="${dist.name}" excludes="${dist.executables}" defaultexcludes="yes"> |
| <patternset refid="dist_bin_files_non_native"/> |
| </tarfileset> |
| <tarfileset mode="755" includes="${dist.executables}" dir="." prefix="${dist.name}" defaultexcludes="yes"/> |
| <tarfileset dir="${native.dir.lf}" prefix="${dist.name}"> |
| <patternset refid="dist_bin_files_native"/> |
| </tarfileset> |
| </tar> |
| <!-- Delete work directory (may not exist) --> |
| <delete dir="${dist.dir}/lf" quiet="true"/> |
| |
| <gzip zipfile="${dist.dir}/${pack.name}.tgz" src="${dist.dir}/${pack.name}.tar" /> |
| <!-- no longer needed --> |
| <delete file="${dist.dir}/${pack.name}.tar"/> |
| <antcall target="_hash"> |
| <param name="path" value="${dist.dir}/${dist.name}.tgz"/> |
| </antcall> |
| |
| <antcall target="_filter"> |
| <param name="eoltype" value="crlf"/> |
| <param name="fileset" value="dist_bin_files_native"/> |
| </antcall> |
| <zip zipfile="${dist.dir}/${pack.name}.zip"> |
| <zipfileset dir="." prefix="${dist.name}" defaultexcludes="yes"> |
| <patternset refid="dist_bin_files_non_native"/> |
| </zipfileset> |
| <zipfileset dir="${native.dir.crlf}" prefix="${dist.name}"> |
| <patternset refid="dist_bin_files_native"/> |
| </zipfileset> |
| </zip> |
| <antcall target="_hash"> |
| <param name="path" value="${dist.dir}/${dist.name}.zip"/> |
| </antcall> |
| <!-- Delete work directory (may not exist) --> |
| <delete dir="${dist.dir}/crlf" quiet="true"/> |
| |
| <!-- Source archives --> |
| <antcall target="_filter"> |
| <param name="eoltype" value="lf"/> |
| <param name="fileset" value="dist_src_files_native"/> |
| </antcall> |
| <tar destfile="${dist.dir}/${pack.name}_src.tar" longfile="gnu"> |
| <tarfileset dir="${native.dir.lf}" prefix="${dist.name}"> |
| <patternset refid="dist_src_files_native"/> |
| </tarfileset> |
| <tarfileset dir="." prefix="${dist.name}" defaultexcludes="yes"> |
| <patternset refid="dist_src_files_non_native"/> |
| </tarfileset> |
| </tar> |
| <!-- Delete work directory (may not exist) --> |
| <delete dir="${dist.dir}/lf" quiet="true"/> |
| |
| <gzip zipfile="${dist.dir}/${pack.name}_src.tgz" src="${dist.dir}/${pack.name}_src.tar" /> |
| <!-- no longer needed --> |
| <delete file="${dist.dir}/${pack.name}_src.tar"/> |
| <antcall target="_hash"> |
| <param name="path" value="${dist.dir}/${dist.name}_src.tgz"/> |
| </antcall> |
| |
| <antcall target="_filter"> |
| <param name="eoltype" value="crlf"/> |
| <param name="fileset" value="dist_src_files_native"/> |
| </antcall> |
| |
| <zip zipfile="${dist.dir}/${pack.name}_src.zip"> |
| <zipfileset dir="${native.dir.crlf}" prefix="${dist.name}"> |
| <patternset refid="dist_src_files_native"/> |
| </zipfileset> |
| <zipfileset dir="." prefix="${dist.name}" defaultexcludes="yes"> |
| <patternset refid="dist_src_files_non_native"/> |
| </zipfileset> |
| </zip> |
| <antcall target="_hash"> |
| <param name="path" value="${dist.dir}/${dist.name}_src.zip"/> |
| </antcall> |
| <!-- Delete work directory (may not exist) --> |
| <delete dir="${dist.dir}/crlf" quiet="true"/> |
| </target> |
| |
| <!-- Set up files for distribution to Maven via Nexus --> |
| <target name="_dist_maven" depends="init-version"> |
| <!-- Ensure there aren't any stale files left --> |
| <delete dir="${maven.dir}" includes="*.pom" quiet="true"/> |
| <echo>Updating POM files to version ${jmeter.version}</echo> |
| <copy todir="${maven.dir}"> |
| <fileset dir="${maven.poms}" includes="*.pom"/> |
| <filterset> |
| <filter token="MAVEN.DEPLOY.VERSION" value="${jmeter.version}"/> |
| </filterset> |
| </copy> |
| <delete dir="${maven.dir}" includes="*.jar" quiet="true"/> |
| <echo>Copying jar files ready for signing</echo> |
| <copy todir="${maven.dir}"> |
| <fileset dir="${dest.jar}" includes="ApacheJMeter*.jar"/> |
| <fileset dir="${dest.jar.jmeter}" includes="ApacheJMeter.jar"/> |
| <fileset dir="${lib.dir}" includes="jorphan.jar"/> |
| </copy> |
| <copy tofile="${maven.dir}/ApacheJMeter_junit-test.jar" file="${lib.dir}/junit/test.jar"/> |
| <!-- |
| Create the Maven jar needed to hold configuration data |
| Cannot be added to any of the other jars as that would cause problems for stand-alone JMeter usage. |
| --> |
| <jar jarfile="${maven.dir}/ApacheJMeter_config.jar" manifest="${build.dir}/MANIFEST_SRC.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <zipfileset dir="${dest.jar.jmeter}" prefix="bin" includes="*.bshrc"/> |
| <zipfileset dir="${dest.jar.jmeter}" prefix="bin" includes="*.parameters"/> |
| <zipfileset dir="${dest.jar.jmeter}" prefix="bin" includes="*.properties"/> |
| <zipfileset dir="${dest.jar.jmeter}" prefix="bin" includes="jaas.conf"/> |
| <zipfileset dir="${dest.jar.jmeter}" prefix="bin" includes="krb5.conf"/> |
| <zipfileset dir="${dest.jar.jmeter}" prefix="bin" includes="log4j.conf"/> |
| <zipfileset dir="${dest.jar.jmeter}" prefix="bin" includes="logkit.xml"/> |
| <zipfileset dir="${dest.jar.jmeter}" prefix="bin" includes="proxyserver.jks"/> |
| <zipfileset dir="${dest.jar.jmeter}" prefix="bin" includes="users.dtd"/> |
| <zipfileset dir="${dest.jar.jmeter}" prefix="bin" includes="users.xml"/> |
| </jar> |
| </target> |
| |
| <!-- |
| Beanshell script to create the svnmucc scripts for upload, delete and publish. |
| |
| The generated script assumes svnmucc is invoked with a root URL of |
| https://dist.apache.org/repos/dist/ |
| This means that the jmeter files are at: |
| dev/jmeter/[binaries|source] |
| and |
| release/jmeter/[binaries|source] |
| --> |
| <scriptdef name="svnmuccScript" language="beanshell"> |
| <classpath> |
| <pathelement location="${lib.dir}/${beanshell.jar}"/> |
| <!-- Needed to work with Java 1.5 --> |
| <pathelement location="${lib.dir}/${apache-bsf.jar}"/> |
| <pathelement location="${lib.dir}/${commons-logging.jar}"/> |
| </classpath> |
| <!-- type of script to create: upload, publish or delete --> |
| <attribute name="type"/> |
| <!-- Name of file to create --> |
| <attribute name="tempfile"/> |
| <![CDATA[ |
| void upload(source) { |
| self.log("Will upload " + source + " to " + RCdir); |
| outstream.println("put"); |
| outstream.println(source); // source |
| outstream.print("dev/jmeter/"); |
| outstream.print(RCdir); |
| outstream.println(source); // dest |
| outstream.println(); |
| } |
| void publish(source, targetDir) { |
| self.log("Will publish " + source + " to " + targetDir); |
| outstream.println("mv"); |
| outstream.print("dev/jmeter/"); |
| outstream.print(RCdir); |
| outstream.println(source); // source |
| outstream.print("release/jmeter/"); |
| outstream.print(targetDir); |
| outstream.println(source); // source |
| outstream.println(); |
| } |
| void delete(source, targetDir) { |
| self.log("Will delete " + source + " from " + targetDir); |
| outstream.println("rm"); |
| outstream.print("release/jmeter/"); |
| outstream.print(targetDir); |
| outstream.println(source); // source |
| outstream.println(); |
| } |
| void processFiles(basename, targetDir) { |
| // combine all the extensions in one list |
| extensions = new String[]{".zip", ".zip.asc", ".zip.md5", ".zip.sha", ".tgz", ".tgz.asc", ".tgz.md5", ".tgz.sha"}; |
| for (i = 0; i < extensions.length; ++i) { |
| extension = extensions[i]; |
| srcFile = basename + extension; |
| |
| if ("upload".equals(type)) { |
| upload(srcFile); |
| } else if ("publish".equals(type)) { |
| publish(srcFile, targetDir); |
| } else if ("delete".equals(type)) { |
| delete(srcFile, targetDir); |
| } |
| } |
| } |
| type = attributes.get("type"); |
| if (type.equals("delete")) { |
| version = project.getProperty("jmeter.old.version"); |
| RC=""; |
| } else { |
| version = project.getProperty("jmeter.version"); |
| RC = project.getProperty("RC"); |
| RCdir = "v"+version+"_"+RC+"/"; |
| } |
| tempfile = attributes.get("tempfile"); |
| self.log("Writing " + type + " script for version " + version + " " + RC + " into " + tempfile); |
| distname = project.getProperty("dist.name"); |
| outstream = new PrintStream(new File(tempfile)); |
| if ("upload".equals(type)) { // make the initial directory |
| outstream.println("mkdir"); |
| outstream.print("dev/jmeter/"); |
| outstream.println(RCdir); |
| outstream.println(); |
| } |
| processFiles(distname, "binaries/"); |
| processFiles(distname+"_src", "source/"); |
| // TODO could remove RCdir, but safer to do that manually after checking it is empty |
| outstream.close(); |
| ]]> |
| </scriptdef> |
| |
| <!-- |
| Run svnnmucc against the svnpubsub distribution area |
| --> |
| <target name="_svnmucc"> |
| <property name="repoType" value="test"/> |
| <condition property="repo" |
| value="https://dist.apache.org/repos/dist/" |
| else="https://svn.apache.org/repos/asf/jmeter/test/" > |
| <equals arg1="live" arg2="${repoType}"/> |
| </condition> |
| <echo level="info">Processing ${tempfile} using svnmucc on repo: ${repoType}</echo> |
| <echo level="info">${repo}</echo> |
| <echo level="info">${message}</echo> |
| <!-- Only one of the following will execute --> |
| <antcall target="_svnmucc_storedPass"/> |
| <antcall target="_svnmucc_providedPass"/> |
| </target> |
| |
| <!-- run svnmucc using stored credentials --> |
| <target name="_svnmucc_storedPass" unless="asf.ldap.password"> |
| <echo level="info" message="Using stored credentials"/> |
| <exec executable="svnmucc" dir="${dist.dir}" logerror="true" failonerror="true" failifexecutionfails="true"> |
| <arg value="--non-interactive"/> <!-- -n alias was removed in svnmucc 1.8.0 --> |
| <!-- not strictly necessary, but does no harm and agrees with password version --> |
| <arg value="--no-auth-cache"/> |
| <arg value="--message"/> <!-- -m --> |
| <arg value="${message}"/> |
| <arg value="--root-url"/> <!-- -U --> |
| <arg value="${repo}"/> |
| <arg value="--extra-args"/> <!-- -X --> |
| <arg value="${tempfile}"/> |
| </exec> |
| </target> |
| |
| <!-- run svnmucc using password provided as a property --> |
| <target name="_svnmucc_providedPass" if="asf.ldap.password"> |
| <!-- provide default user name --> |
| <property name="asf.ldap.username" value="${user.name}"/> |
| <echo level="info" message="Using provided credentials for user ${asf.ldap.username}"/> |
| <exec executable="svnmucc" dir="${dist.dir}" logerror="true" failonerror="true" failifexecutionfails="true"> |
| <arg value="--non-interactive"/> |
| <!-- we don't want to cache the provided credentials --> |
| <arg value="--no-auth-cache"/> |
| <arg value="--message"/> <!-- -m --> |
| <arg value="${message}"/> |
| <arg value="--root-url"/> <!-- -U --> |
| <arg value="${repo}"/> |
| <arg value="--extra-args"/> <!-- -X --> |
| <arg value="${tempfile}"/> |
| <!-- Add credentials provided on command-line --> |
| <arg value="--username"/> <!-- -u --> |
| <arg value="${asf.ldap.username}"/> |
| <arg value="--password"/> <!-- -p --> |
| <arg value="${asf.ldap.password}"/> |
| </exec> |
| </target> |
| |
| <!-- |
| Targets for deploying release candidates via svnpubsub. |
| |
| By default, deploys the artifacts under the JMeter test repo: |
| https://svn.apache.org/repos/asf/jmeter/test/ |
| |
| The live repo is: |
| https://dist.apache.org/repos/dist/ |
| |
| The JMeter files are to be found under: |
| |
| dev/jmeter/[source|binaries] |
| and |
| release/jmeter/[source|binaries] |
| |
| Files that are expected to be present: |
| apache-jmeter-<version>.[tgz|zip] + [.asc|.md5|.sha] |
| apache-jmeter-<version>_src.[tgz|zip] + [.asc|.md5|.sha] |
| |
| Must have SVN installed, in particular the svnmucc command-line client. |
| |
| |
| Pre-requisites: |
| The distribution files must have been built and signed and placed in the dist/ directory. |
| If any required files are missing, then upload will fail. |
| |
| Usage: |
| ant RC_upload [-DrepoType=test|live] [-Djmeter.version=2.9] -DRC=RCn [-Dasf.ldap.password=secret [-Dasf.ldap.usermame=user] ] |
| ant RC_publish [-DrepoType=test|live] [-Djmeter.version=2.9] -DRC=RCn [-Dasf.ldap.password=secret [-Dasf.ldap.usermame=user] ] |
| ant release_delete [-DrepoType=test|live] -Djmeter.old.version=2.8 [-Dasf.ldap.password=secret [-Dasf.ldap.usermame=user] ] |
| (the old version must be specified and different from the current version!) |
| |
| If the ldap password is not provided, svnmucc is invoked without the username (-u) and password (-p) parameters. |
| In this case, svnmucc will use whatever stored credentials are present for the svn host. |
| |
| If not using stored credentials, provide at least the ldap password. |
| The ldap username defaults to the login name (i.e. the Java user.name property) but can also be provided. |
| |
| Note: svnmucc can only move or copy files where the target does not exist. |
| This is perfect for deploying an RC or new release as these use unique names. |
| However, any existing files such as HEADER.html will need to be handled separately. |
| --> |
| |
| |
| <target name="RC_upload" description="Upload release candidate to svnpubsub area" depends="init-version"> |
| <fail message="RC property must be defined!" unless="RC"/> |
| <echo>Version = ${jmeter.version} ${RC}</echo> |
| <property name="dist.name" value="apache-jmeter-${jmeter.version}"/> |
| <property name="tempfile" value="svnmucc_upload.tmp"/> |
| <svnmuccScript type="upload" tempfile="${dist.dir}/${tempfile}"/> |
| <antcall target="_svnmucc"> |
| <param name="message" value="Uploading release candidate ${dist.name} to dev area"/> |
| </antcall> |
| </target> |
| |
| <target name="RC_publish" description="Publish release candidate from svnpubsub area" depends="init-version"> |
| <fail message="RC property must be defined!" unless="RC"/> |
| <echo>Version = ${jmeter.version} ${RC}</echo> |
| <property name="dist.name" value="apache-jmeter-${jmeter.version}"/> |
| <property name="tempfile" value="svnmucc_publish.tmp"/> |
| <svnmuccScript type="publish" tempfile="${dist.dir}/${tempfile}"/> |
| <antcall target="_svnmucc"> |
| <param name="message" value="Publishing ${dist.name} ${RC}"/> |
| </antcall> |
| </target> |
| |
| <target name="release_delete" description="Delete old release candidate from svnpubsub area" depends="init-version"> |
| <fail message="jmeter.old.version property must be defined!" unless="jmeter.old.version"/> |
| <condition property="same"> |
| <equals arg1="${jmeter.old.version}" arg2="${jmeter.version}"/> |
| </condition> |
| <echo>Old Version = ${jmeter.old.version}</echo> |
| <fail message="jmeter.old.version must be different from current jmeter.version!" if="same"/> |
| <property name="dist.name" value="apache-jmeter-${jmeter.old.version}"/> |
| <property name="tempfile" value="svnmucc_delete.tmp"/> |
| <svnmuccScript type="delete" tempfile="${dist.dir}/${tempfile}"/> |
| <antcall target="_svnmucc"> |
| <param name="message" value="Deleting old release ${dist.name}"/> |
| </antcall> |
| </target> |
| |
| <!-- |
| Upload jars/poms/sigs to local (/target), snapshots or releases repos; default is local. |
| By default, deploys the artifacts to target/deploy under JMeter home. |
| |
| Must have Maven 2.2.1 or Maven 3.0.x installed. |
| The environment variable M2_HOME must point to a suitable Maven installation (2.2.1+) |
| |
| For remote deployment, username/password will need to be set up in the appropriate |
| "server" entries in the Maven settings.xml file, i.e. under: |
| |
| apache.snapshots.https |
| apache.releases.https |
| |
| Pre-requisite: |
| The jars and poms need to be made available. If this has not already been done as part of |
| creating the distribution (e.g. a snapshot release is desired), then invoke the following: |
| |
| ant _dist_maven -Djmeter.version=2.9-SNAPSHOT |
| |
| For non-SNAPSHOT releases, the jars and poms need to be signed (TODO document how!!) |
| |
| Usage: |
| ant maven_upload [-DrepoType=snapshots|releases] |
| --> |
| <target name="maven_upload" description="Upload Maven jars and poms (and sigs if present) to Nexus."> |
| |
| <property environment="env"/> |
| <!-- According to http://maven.apache.org/download.html#Installation M2_HOME applies to Maven 2.2.1 and 3.0.x --> |
| <condition property="maven.present"> |
| <or> |
| <isset property="env.M2_HOME"/> |
| <isset property="maven.home"/> <!-- Allow override on command-line --> |
| </or> |
| </condition> |
| <fail unless="${maven.present}" |
| message="The environment variable M2_HOME (or property maven.home) must point to a Maven installation"/> |
| |
| <property name="maven.home" value="${env.M2_HOME}"/> |
| |
| <!-- file repo url --> |
| <property name="file.url" value="file:${basedir}/target/deploy"/> |
| |
| <!-- Apache Nexus snapshots repo url --> |
| <property name="snapshots.url" value="https://repository.apache.org/content/repositories/snapshots"/> |
| <!-- Apache Nexus snapshots repo name for servers section of settings.xml --> |
| <property name="snapshots.repositoryId" value="apache.snapshots.https"/> |
| |
| <!-- Apache Nexus releases repo url --> |
| <property name="releases.url" value="https://repository.apache.org/service/local/staging/deploy/maven2"/> |
| <!-- Apache Nexus releases repo name for servers section of settings.xml --> |
| <property name="releases.repositoryId" value="apache.releases.https"/> |
| |
| <property name="repoType" value="file"/> |
| |
| <!-- Hack to skip defining files/types/classifiers --> |
| <condition property="XX" value="" else="XX"> |
| <and> |
| <available file="${maven.dir}/jorphan.jar.asc"/> |
| <available file="${maven.dir}/jorphan.pom.asc"/> |
| <!-- Don't upload sigs to snapshots repo (might mislead users) --> |
| <not> |
| <equals arg1="snapshots" arg2="@repoType"/> |
| </not> |
| </and> |
| </condition> |
| |
| <!-- Derived from: |
| http://maven.apache.org/ant-tasks/examples/mvn.html#Using_the_Java_Task |
| --> |
| <macrodef name="deployfile"> |
| <attribute name="stem" /> |
| <attribute name="packaging" default="jar"/> |
| <attribute name="type" default="${repoType}"/> |
| <attribute name="url" default="${@{type}.url}"/> |
| <attribute name="repositoryId" default="${@{type}.repositoryId}"/> |
| <sequential> |
| <java classname="org.codehaus.classworlds.Launcher" |
| fork="true" |
| dir="${basedir}" |
| failonerror="true"> |
| <jvmarg value="-Xmx512m"/> |
| <classpath> |
| <fileset dir="${maven.home}/boot"> |
| <include name="*.jar" /> |
| </fileset> |
| <fileset dir="${maven.home}/lib"> |
| <include name="*.jar" /> |
| </fileset> |
| </classpath> |
| <sysproperty key="classworlds.conf" value="${maven.home}/bin/m2.conf" /> |
| <sysproperty key="maven.home" value="${maven.home}" /> |
| <arg value="--batch-mode"/> |
| <!--arg value="-X"/--> |
| <arg value="-DgeneratePom=false"/> |
| <arg value="-Durl=@{url}"/> |
| <arg value="-DrepositoryId=@{repositoryId}"/> |
| <arg value="-DpomFile=${maven.dir}/@{stem}.pom"/> |
| <arg value="-Dpackaging=@{packaging}"/> |
| <arg value="-Dfile=${maven.dir}/@{stem}.${packaging}"/> |
| <!-- |
| The XX property is a hack to avoid creating conditional code. |
| It will be empty if the sigs exist; if not it will be XX which will be ignored by Maven |
| --> |
| <!-- If packaging == pom, this will just upload the pom twice. Simpler than trying to conditionalise. --> |
| <arg value="-D${XX}files=${maven.dir}/@{stem}.${packaging}.asc,${maven.dir}/@{stem}.pom.asc"/> |
| <arg value="-D${XX}types=${packaging}.asc,pom.asc"/> |
| <arg value="-D${XX}classifiers=,"/> |
| <!-- Need at least version 2.7 of the plugin to upload additional files--> |
| <arg value="org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file"/> |
| </java> |
| </sequential> |
| </macrodef> |
| |
| |
| <deployfile stem="ApacheJMeter_parent" packaging="pom"/> |
| <deployfile stem="jorphan"/> |
| <deployfile stem="ApacheJMeter"/> |
| <deployfile stem="ApacheJMeter_components"/> |
| <deployfile stem="ApacheJMeter_config"/> |
| <deployfile stem="ApacheJMeter_core"/> |
| <deployfile stem="ApacheJMeter_ftp"/> |
| <deployfile stem="ApacheJMeter_functions"/> |
| <deployfile stem="ApacheJMeter_http"/> |
| <deployfile stem="ApacheJMeter_java"/> |
| <deployfile stem="ApacheJMeter_jdbc"/> |
| <deployfile stem="ApacheJMeter_jms"/> |
| <deployfile stem="ApacheJMeter_junit"/> |
| <deployfile stem="ApacheJMeter_junit-test"/> |
| <deployfile stem="ApacheJMeter_ldap"/> |
| <deployfile stem="ApacheJMeter_mail"/> |
| <deployfile stem="ApacheJMeter_monitors"/> |
| <deployfile stem="ApacheJMeter_native"/> |
| <deployfile stem="ApacheJMeter_report"/> |
| <deployfile stem="ApacheJMeter_tcp"/> |
| </target> |
| |
| <!-- |
| Gump targets. |
| There are separate build and test projects for the jmeter module. |
| --> |
| <!-- Used by project jmeter-cvs --> |
| <target name="gump-build" |
| depends="_gump_properties,clean,install" |
| description="Build JMeter"> |
| <property name="dist.name" value="apache-jmeter-${jmeter.version}"/> |
| <available file="${velocity.jar}" property="velocity.present"/> |
| <!-- No need to create the archives for Gump |
| <antcall target="_pack-binaries"/> |
| <antcall target="_pack-libraries"/> |
| <antcall target="_pack-source"/> |
| --> |
| </target> |
| |
| <!-- Used by project jmeter-test --> |
| <target name="gump-test" |
| depends="_gump_properties,compile-tests,_test" |
| description="Test JMeter in Gump"> |
| <!-- Show the log file |
| <concat> |
| <filelist dir="bin" files="jmeter-test.log" /> |
| </concat> |
| --> |
| </target> |
| |
| <target name="_gump_properties"> |
| <echo level="info"> |
| Gump properties for this run |
| jmeter.version = ${jmeter.version} |
| gump.run = ${gump.run} |
| date.projectfile = ${date.projectfile} |
| version.projectfile = ${version.projectfile} |
| Build file: |
| version.build = ${version.build} |
| Java properties: |
| target.java.version = ${target.java.version} |
| src.java.version = ${src.java.version} |
| optimize = ${optimize} |
| deprecation = ${deprecation} |
| encoding = ${encoding} |
| </echo> |
| <echoproperties prefix="ant"/> |
| <echoproperties prefix="gump"/> |
| <echoproperties prefix="os"/> |
| <echoproperties prefix="java"/> |
| |
| </target> |
| |
| <target name="pack-src" depends="init-version"> |
| <property name="dist.name" value="apache-jmeter-${jmeter.version}"/> |
| <antcall target="_pack-source"/> |
| </target> |
| |
| <target name="pack-dist" depends="init-version"> |
| <property name="dist.name" value="apache-jmeter-${jmeter.version}"/> |
| <antcall target="_pack-binaries"/> |
| <antcall target="_pack-libraries"/> |
| <antcall target="_pack-javadoc"/> |
| <antcall target="_pack-source"/> |
| </target> |
| |
| <!-- As pack-dist but without javadoc --> |
| <target name="pack-nightly" depends="init-version"> |
| <property name="dist.name" value="apache-jmeter-${jmeter.version}"/> |
| <antcall target="_pack-binaries"/> |
| <antcall target="_pack-libraries"/> |
| <antcall target="_pack-source"/> |
| </target> |
| |
| <target name="_pack-binaries"> |
| <property name="pack.name" value="${dist.name}_bin"/> |
| <mkdir dir="${dist.dir}"/> |
| <tar destfile="${dist.dir}/${pack.name}.tar" longfile="gnu"> |
| <tarfileset dir="." prefix="${dist.name}" excludes="${dist.executables}" defaultexcludes="yes"> |
| <patternset refid="dist.binaries.native"/> |
| </tarfileset> |
| <tarfileset dir="." prefix="${dist.name}" excludes="${dist.executables}" defaultexcludes="yes"> |
| <patternset refid="dist.binaries.non.native"/> |
| </tarfileset> |
| <tarfileset mode="755" includes="${dist.executables}" dir="." prefix="${dist.name}" defaultexcludes="yes"/> |
| </tar> |
| <gzip zipfile="${dist.dir}/${pack.name}.tgz" src="${dist.dir}/${pack.name}.tar" /> |
| <!-- no longer needed --> |
| <delete file="${dist.dir}/${pack.name}.tar"/> |
| <zip zipfile="${dist.dir}/${pack.name}.zip"> |
| <zipfileset dir="." prefix="${dist.name}" defaultexcludes="yes"> |
| <patternset refid="dist.binaries.native"/> |
| </zipfileset> |
| <zipfileset dir="." prefix="${dist.name}" defaultexcludes="yes"> |
| <patternset refid="dist.binaries.non.native"/> |
| </zipfileset> |
| </zip> |
| </target> |
| |
| <target name="_pack-libraries"> |
| <property name="pack.name" value="${dist.name}_lib"/> |
| <mkdir dir="${dist.dir}"/> |
| <tar destfile="${dist.dir}/${pack.name}.tar" longfile="gnu"> |
| <tarfileset dir="." prefix="${dist.name}" defaultexcludes="yes"> |
| <patternset refid="external.jars.notices"/> |
| </tarfileset> |
| <tarfileset dir="." prefix="${dist.name}" defaultexcludes="yes"> |
| <patternset refid="external.jars"/> |
| </tarfileset> |
| </tar> |
| <gzip zipfile="${dist.dir}/${pack.name}.tgz" src="${dist.dir}/${pack.name}.tar" /> |
| <!-- no longer needed --> |
| <delete file="${dist.dir}/${pack.name}.tar"/> |
| <zip zipfile="${dist.dir}/${pack.name}.zip"> |
| <zipfileset dir="." prefix="${dist.name}" defaultexcludes="yes"> |
| <patternset refid="external.jars.notices"/> |
| </zipfileset> |
| <zipfileset dir="." prefix="${dist.name}" defaultexcludes="yes"> |
| <patternset refid="external.jars"/> |
| </zipfileset> |
| </zip> |
| </target> |
| |
| <target name="_pack-javadoc"> |
| <property name="pack.name" value="${dist.name}_api"/> |
| <mkdir dir="${dist.dir}"/> |
| <tar destfile="${dist.dir}/${pack.name}.tar" longfile="gnu"> |
| <tarfileset includes="${dest.docs.api}" dir="." prefix="${dist.name}" defaultexcludes="yes"/> |
| </tar> |
| <gzip zipfile="${dist.dir}/${pack.name}.tgz" src="${dist.dir}/${pack.name}.tar" /> |
| <!-- no longer needed --> |
| <delete file="${dist.dir}/${pack.name}.tar"/> |
| <zip zipfile="${dist.dir}/${pack.name}.zip"> |
| <zipfileset includes="${dest.docs.api}" dir="." prefix="${dist.name}" defaultexcludes="yes"/> |
| </zip> |
| </target> |
| |
| <target name="_pack-source"> |
| <property name="pack.name" value="${dist.name}_src"/> |
| <mkdir dir="${dist.dir}"/> |
| <tar destfile="${dist.dir}/${pack.name}.tar" longfile="gnu"> |
| <tarfileset dir="." prefix="${dist.name}" defaultexcludes="yes"> |
| <patternset refid="dist.sources.native"/> |
| </tarfileset> |
| <tarfileset dir="." prefix="${dist.name}" defaultexcludes="yes"> |
| <patternset refid="dist.sources.non.native"/> |
| </tarfileset> |
| </tar> |
| <gzip zipfile="${dist.dir}/${pack.name}.tgz" src="${dist.dir}/${pack.name}.tar" /> |
| <!-- no longer needed --> |
| <delete file="${dist.dir}/${pack.name}.tar"/> |
| <zip zipfile="${dist.dir}/${pack.name}.zip"> |
| <zipfileset dir="." prefix="${dist.name}" defaultexcludes="yes"> |
| <patternset refid="dist.sources.native"/> |
| </zipfileset> |
| <zipfileset dir="." prefix="${dist.name}" defaultexcludes="yes"> |
| <patternset refid="dist.sources.non.native"/> |
| </zipfileset> |
| </zip> |
| </target> |
| |
| <!-- Create a zip of all resource files for translators --> |
| <target name="pack-resources"> |
| <mkdir dir="${dist.dir}"/> |
| <zip zipfile="${dist.dir}/resources.zip"> |
| <zipfileset dir="." defaultexcludes="yes"> |
| <patternset excludes="${src.dir}/examples/**" /> |
| <patternset includes="${src.dir}/**/*Resources.properties" /> |
| <patternset includes="${src.dir}/**/messages.properties" /> |
| <patternset includes="${src.dir}/**/i18nedit.properties" /> |
| </zipfileset> |
| </zip> |
| </target> |
| |
| <!-- |
| Utility target to create MD5 checksums in standard format (with *filename) |
| Usage: |
| <antcall target="_hash"> |
| <param name="path" value="archive.jar|zip|gz"/> |
| </antcall> |
| --> |
| |
| <target name="_hash" unless="hash.skip"> |
| <echo message="Creating MD5 for ${path}"/> |
| <basename property="_base" file="${path}"/> |
| <checksum algorithm="MD5" file="${path}" property="md5"/> |
| <echo message="${md5} *${_base}" file="${path}.md5"/> |
| <echo message="Creating SHA for ${path}"/> |
| <checksum algorithm="SHA" file="${path}" property="sha"/> |
| <echo message="${sha} *${_base}" file="${path}.sha"/> |
| </target> |
| |
| <!-- |
| Clean-docs and clean-apidocs can be used to empty the docs or docs/api directories. |
| This should be done before regenerating the documents for a release so that any obsolete files are detected. |
| --> |
| <target name="clean-docs"> |
| <delete> |
| <fileset dir="${dest.docs}" excludes=".svn/** api/**"/> |
| </delete> |
| </target> |
| |
| <!-- Use this before running docs-print to ensure image files are synchronised --> |
| <target name="clean-docs-images"> |
| <delete> |
| <fileset dir="${dest.docs}/images" excludes=".svn/**"/> |
| </delete> |
| </target> |
| |
| <target name="clean-apidocs"> |
| <delete> |
| <fileset dir="${dest.docs.api}" excludes=".svn/**"/> |
| </delete> |
| </target> |
| |
| <target name="clean" description="Clean up to force a build from source."> |
| <!-- Unfortunately Ant reports failure if a directory does not exist --> |
| <delete quiet="false" failonerror="false"> |
| <fileset dir="${dest.jar.jmeter}" includes="ApacheJMeter.jar"/> |
| <fileset dir="${lib.dir}" includes="jorphan.jar"/> |
| <fileset dir="${lib.dir}" includes="bshclient.jar"/> |
| <fileset dir="${dest.jar}" includes="*.jar"/> |
| <fileset dir="${build.dir}"/> |
| <fileset dir="${dest.printable_docs}"/> |
| <fileset dir="${dist.dir}"/> |
| </delete> |
| </target> |
| |
| <target name="clean-dist" description="Clean up dist directory."> |
| <delete quiet="true"> |
| <fileset dir="${dist.dir}"/> |
| </delete> |
| </target> |
| |
| <target name="docs-api" description="Generate the API documentation."> |
| <tstamp> |
| <!-- Used to ensure end-year is up to date --> |
| <format property="THISYEAR" pattern="yyyy"/> |
| </tstamp> |
| <mkdir dir="${dest.docs.api}"/> |
| <delete quiet="true"> |
| <fileset dir="${dest.docs.api}" includes="**/*.html"/> |
| </delete> |
| <echo level="info">Updating overview to ${docversion}</echo> |
| <replaceregexp match="version [^\s]+" |
| encoding="${encoding}" |
| replace="version ${docversion}" |
| flags="g" byline="true"> |
| <fileset dir="${src.docs}" includes="overview.html" /> |
| </replaceregexp> |
| <javadoc |
| sourcepathref="srcpaths" |
| overview="${src.docs}/overview.html" |
| additionalparam="-breakiterator" |
| destdir="${dest.docs.api}" |
| encoding="${javadoc.encoding}" |
| verbose="false" |
| protected="yes" |
| version="yes" |
| doctitle="Apache JMeter API" |
| windowtitle="Apache JMeter API" |
| header="<b>Apache JMeter</b>" |
| bottom="Copyright &#xA9; 1998-${THISYEAR} Apache Software Foundation. All Rights Reserved." |
| packagenames="org.apache.jmeter.*,org.apache.jorphan.*" |
| excludepackagenames="org.apache.jorphan.timer"> |
| <classpath refid="classpath"/> |
| <link href="http://docs.oracle.com/javase/6/docs/api/"/> |
| </javadoc> |
| <patch-javadoc dir="${dest.docs.api}" docencoding="${javadoc.encoding}"/> |
| </target> |
| |
| <!-- Macro copied from: http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/build.xml r1495881 --> |
| <!-- |
| Patch frame injection bugs in javadoc generated files - see CVE-2013-1571, |
| http://www.kb.cert.org/vuls/id/225657 |
| |
| This macro works together with the javadoc task on Ant and should be invoked |
| directly after its execution to patch broken javadocs, e.g.: |
| <patch-javadoc dir="..." docencoding="UTF-8"/> |
| Please make sure that the docencoding parameter uses the same charset as |
| javadoc's docencoding. Default is the platform default encoding (like the |
| javadoc task). |
| The specified dir is the destination directory of the javadoc task. |
| --> |
| <macrodef name="patch-javadoc"> |
| <attribute name="dir"/> |
| <attribute name="docencoding" default="${file.encoding}"/> |
| <sequential> |
| <replace encoding="@{docencoding}" summary="true" taskname="patch-javadoc"> |
| <restrict> |
| <fileset dir="@{dir}" casesensitive="false" |
| includes="**/index.html,**/index.htm,**/toc.html,**/toc.htm"/> |
| <!-- TODO: add encoding="@{docencoding}" to contains check, when we |
| are on ANT 1.9.0: --> |
| <not> |
| <contains text="function validURL(url) {" casesensitive="true" /> |
| </not> |
| </restrict> |
| <replacetoken><![CDATA[function loadFrames() {]]></replacetoken> |
| <replacevalue expandProperties="false"><![CDATA[if (targetPage != "" && !validURL(targetPage)) |
| targetPage = "undefined"; |
| function validURL(url) { |
| var pos = url.indexOf(".html"); |
| if (pos == -1 || pos != url.length - 5) |
| return false; |
| var allowNumber = false; |
| var allowSep = false; |
| var seenDot = false; |
| for (var i = 0; i < url.length - 5; i++) { |
| var ch = url.charAt(i); |
| if ('a' <= ch && ch <= 'z' || |
| 'A' <= ch && ch <= 'Z' || |
| ch == '$' || |
| ch == '_') { |
| allowNumber = true; |
| allowSep = true; |
| } else if ('0' <= ch && ch <= '9' |
| || ch == '-') { |
| if (!allowNumber) |
| return false; |
| } else if (ch == '/' || ch == '.') { |
| if (!allowSep) |
| return false; |
| allowNumber = false; |
| allowSep = false; |
| if (ch == '.') |
| seenDot = true; |
| if (ch == '/' && seenDot) |
| return false; |
| } else { |
| return false; |
| } |
| } |
| return true; |
| } |
| function loadFrames() {]]></replacevalue> |
| </replace> |
| </sequential> |
| </macrodef> |
| |
| <!-- |
| Run Doccheck: See http://java.sun.com/j2se/javadoc/doccheck/docs/DocCheck.html |
| and http://java.sun.com/j2se/javadoc/doccheck/ |
| Download the doclet, and put the jar in lib/opt. |
| Output is in reports/ directory |
| --> |
| <target name="docs-check"> |
| <javadoc sourcepathref="srcpaths" |
| destdir="reports" |
| docletpath="${lib.opt}/doccheck.jar" |
| packagenames="org.apache.jmeter.*,org.apache.jorphan.*" |
| excludepackagenames="org.apache.jmeter.util.keystore,org.apache.jorphan.timer"> |
| <classpath refid="classpath"/> |
| <doclet name="com.sun.tools.doclets.doccheck.DocCheck"> |
| <!-- |
| -execDepth: 1=org.* 2=org.apache.* 3+=org.apache.jmeter.* |
| -evident does not seem to work |
| --> |
| <param name="-execDepth" value="3"/> |
| <param name="-evident" value="4"/> |
| </doclet> |
| </javadoc> |
| </target> |
| |
| <target name="docs-site" depends="init-docs" if="AnakiaTask.present" description="Generate browsable HTML documentation in web-site format."> |
| <taskdef name="anakia" classpathref="anakia.classpath" classname="org.apache.velocity.anakia.AnakiaTask"/> |
| <!-- The extending pages are rather out of date (and not linked from elsewhere) --> |
| <anakia basedir="${src.docs}" destdir="${dest.docs}/" extension=".html" style="${eclipse.anakia}/xdocs/stylesheets/site.vsl" projectFile="./stylesheets/project.xml" |
| excludes="**/stylesheets/** extending.xml extending/*.xml" |
| includes="**/*.xml" lastModifiedCheck="${anakia.lastModifiedCheck}" velocityPropertiesFile="${src.docs}/velocity.properties"/> |
| <echo level="info">Fixing EOL</echo> |
| <fixcrlf encoding="iso-8859-1" srcdir="${dest.docs}/" includes="**/*.html" excludes="api/**" fixlast="false"/> |
| <echo level="info">Removing unnecessary </br> tags</echo> |
| <replace encoding="iso-8859-1" dir="${dest.docs}/" includes="**/*.html" token="</br>" value=""/> |
| <echo level="info">Copying files</echo> |
| <copy todir="${dest.docs}/css"> |
| <fileset dir="${src.css}"/> |
| </copy> |
| <copy todir="${dest.docs}/images"> |
| <fileset dir="${src.images}" excludes="logo.xcf"/> |
| </copy> |
| <copy todir="${dest.docs}/demos"> |
| <fileset dir="${src.demos}"/> |
| </copy> |
| <copy todir="${dest.docs}/usermanual"> |
| <fileset file="${src.docs}/usermanual/*.pdf"/> |
| </copy> |
| <copy todir="${dest.docs}/extending"> |
| <fileset file="${src.docs}/extending/jmeter_tutorial.pdf"/> |
| </copy> |
| <copy todir="${dest.docs}/"> |
| <fileset file="${src.docs}/download_jmeter.cgi"/> |
| </copy> |
| </target> |
| |
| <target name="docs-printable" depends="init-docs" if="AnakiaTask.present" description="Generate printable HTML documentation."> |
| <taskdef name="anakia" classpathref="anakia.classpath" classname="org.apache.velocity.anakia.AnakiaTask"/> |
| <!-- The extending pages are rather out of date (and not linked from elsewhere) --> |
| <anakia basedir="${src.docs}" destdir="${dest.printable_docs}/" extension=".html" style="${eclipse.anakia}/xdocs/stylesheets/site_printable.vsl" projectFile="./stylesheets/printable_project.xml" |
| excludes="**/stylesheets/** extending.xml extending/*.xml" |
| includes="**/*.xml" lastModifiedCheck="${anakia.lastModifiedCheck}" velocityPropertiesFile="${src.docs}/velocity.properties"/> |
| <echo level="info">Fixing EOL</echo> |
| <fixcrlf encoding="iso-8859-1" srcdir="${dest.printable_docs}/" includes="**/*.html" fixlast="false"/> |
| <echo level="info">Removing unnecessary </br> tags</echo> |
| <replace encoding="iso-8859-1" dir="${dest.printable_docs}/" includes="**/*.html" token="</br>" value=""/> |
| <!-- |
| Share images with non-printable version |
| Means printable version won't work on web-site |
| --> |
| <echo level="info">Copying files</echo> |
| <copy todir="${dest.docs}/css"> |
| <fileset dir="${src.css}"/> |
| </copy> |
| <copy todir="${dest.docs}/images"> |
| <fileset dir="${src.images}" excludes="logo.xcf"/> |
| </copy> |
| <copy todir="${dest.printable_docs}/demos"> |
| <fileset dir="${src.demos}"/> |
| </copy> |
| <copy todir="${dest.printable_docs}/usermanual"> |
| <fileset file="${src.docs}/usermanual/*.pdf"/> |
| </copy> |
| <copy todir="${dest.printable_docs}/extending"> |
| <fileset file="${src.docs}/extending/jmeter_tutorial.pdf"/> |
| </copy> |
| </target> |
| |
| <target name="test" depends="compile-tests,_test,_allbatchtests" |
| description="Run tests (use -Djava.awt.headless=true on systems without graphic displays)"/> |
| |
| <target name="test-both" depends="test-headless,test-headed"/> |
| |
| <target name="test-headless" depends="compile-tests"> |
| <antcall target="_test"> |
| <param name="test.headless" value="true"/> |
| </antcall> |
| </target> |
| |
| <target name="test-headed" depends="compile-tests"> |
| <antcall target="_test"> |
| <param name="test.headless" value="false"/> |
| </antcall> |
| </target> |
| |
| <target name="batchtestserver" description="Run the batch test using client-server mode"> |
| <property name="batchtestserver.out" location="${basedir}/bin"/> |
| <property name="batchtestserver.log" value="BatchTestServer.log"/> |
| <property name="rmi_port" value="2099"/> |
| <parallel> |
| <daemons> |
| <java taskname="server" classname="org.apache.jmeter.NewDriver" fork="yes" dir="${batchtestserver.out}"> |
| <classpath> |
| <fileset dir="${dest.jar.jmeter}" includes="*.jar"/> |
| <fileset dir="${dest.jar}" includes="*.jar"/> |
| <path refid="classpath"/> |
| </classpath> |
| <sysproperty key="java.awt.headless" value="true"/> |
| <arg value="-ptestfiles/jmeter-batch.properties"/> |
| <arg value="-j"/> |
| <arg value="${batchtestserver.out}/${batchtestserver.log}"/> |
| <arg value="-Dserver_port=${rmi_port}"/> |
| <arg value="-s"/> |
| <arg value="-Jserver.exitaftertest=true"/> |
| </java> |
| </daemons> |
| <sequential> |
| <sleep seconds="1"/> |
| <antcall target="batchtest"> |
| <param name="remote" value="-Rlocalhost:${rmi_port}"/> |
| <param name="taskname" value="client"/> |
| <!-- Default the test name so we can override with a parameter --> |
| </antcall> |
| </sequential> |
| </parallel> |
| <!-- Show the log file --> |
| <concat> |
| <filelist dir="${batchtestserver.out}" files="${batchtestserver.log}" /> |
| </concat> |
| |
| <local name="BatchTestLocalServer.len"/> |
| <condition property="BatchTestLocalServer.len"> |
| <length file="${batchtestserver.out}/${batchtestserver.log}" when="equal" length="0" /> |
| </condition> |
| <fail unless="BatchTestLocalServer.len"> |
| Error detected in server log file. See above. |
| </fail> |
| |
| <delete> |
| <fileset dir="${batchtestserver.out}"> |
| <include name="${batchtestserver.log}"/> |
| </fileset> |
| </delete> |
| </target> |
| |
| <target name="batchtest" description="Run the batch test and compare output files"> |
| |
| <!-- will be overwritten by antcall paramaters --> |
| <property name="taskname" value="jmeter"/> |
| <property name="remote" value="-X"/> |
| <property name="batchtest.inp" location="${basedir}/bin/testfiles"/> |
| <property name="batchtest.out" location="${basedir}/bin"/> |
| <property name="batchtest.name" value="BatchTestLocal"/> |
| <!-- |
| Allow variable to be set on the command line |
| Cannot omit value because that causes a warning message |
| --> |
| <property name="batchtest.variable" value="dummy"/> |
| <property name="batchtest.value" value="dummy"/> |
| |
| <!-- Fix the EOL in case the file was derived from the "wrong" archive type --> |
| <fixcrlf encoding="${encoding}" srcdir="${batchtest.inp}" includes="${batchtest.name}.csv"/> |
| |
| <echo level="info" message="Starting ${batchtest.name} using ${remote}"/> |
| |
| <macrodef name="deleteworkfiles"> |
| <sequential> |
| <delete> |
| <fileset dir="${batchtest.out}"> |
| <include name="${batchtest.name}.csv"/> |
| <include name="${batchtest.name}.xml"/> |
| <include name="${batchtest.name}.log"/> |
| <include name="${batchtest.name}.jtl"/> |
| </fileset> |
| </delete> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="checkfile"> |
| <attribute name="type" default=""/> |
| <attribute name="file"/> |
| <sequential> |
| <local name="found"/> |
| <!--echo>Looking for @{file}</echo--> |
| <available property="found" file="@{file}"/> |
| <fail message="Cannot find @{type} file @{file}" unless="found"/> |
| </sequential> |
| </macrodef> |
| |
| <checkfile type="input" file="${batchtest.inp}${file.separator}${batchtest.name}.csv"/> |
| <checkfile type="input" file="${batchtest.inp}${file.separator}${batchtest.name}.xml"/> |
| |
| <deleteworkfiles/> |
| |
| <java taskname="${taskname}" classname="org.apache.jmeter.NewDriver" fork="yes" dir="${basedir}/bin"> |
| <classpath> |
| <fileset dir="${dest.jar.jmeter}" includes="*.jar"/> |
| <fileset dir="${dest.jar}" includes="*.jar"/> |
| <path refid="classpath"/> |
| </classpath> |
| <!-- Detect if non-GUI runs OK headless by forcing it to try using non-headless mode --> |
| <sysproperty key="java.awt.headless" value="false"/> |
| <arg value="-ptestfiles/jmeter-batch.properties"/> |
| <arg value="-n"/> |
| <arg value="-ttestfiles/${batchtest.name}.jmx"/> |
| <arg value="-j"/> |
| <arg value="${batchtest.name}.log"/> |
| <arg value="-l"/> |
| <arg value="${batchtest.name}.jtl"/> |
| <arg value="${remote}"/> |
| <!-- Check properties can be passed to local/remote tests --> |
| <arg value="-Jmodule=Module"/> |
| <arg value="-Gmodule=Module"/> |
| <!-- Check property can be used for filenames in local/remote tests (no need to defined as -G) --> |
| <arg value="-JCSVFILE=${batchtest.name}.csv"/> |
| <arg value="-J${batchtest.variable}=${batchtest.value}"/> |
| </java> |
| |
| <!-- Show the log file --> |
| <concat> |
| <filelist dir="${batchtest.out}" files="${batchtest.name}.log" /> |
| </concat> |
| |
| <checkfile type="output" file="${batchtest.out}${file.separator}${batchtest.name}.csv"/> |
| <checkfile type="output" file="${batchtest.out}${file.separator}${batchtest.name}.xml"/> |
| <checkfile type="output" file="${batchtest.out}${file.separator}${batchtest.name}.jtl"/> |
| |
| <local name="BatchTestLocal.csv.OK"/> |
| <condition property="BatchTestLocal.csv.OK"> |
| <filesmatch file1="${batchtest.inp}/${batchtest.name}.csv" file2="${batchtest.out}/${batchtest.name}.csv"/> |
| </condition> |
| <fail unless="BatchTestLocal.csv.OK"> |
| CSV Files are not identical. |
| ${batchtest.inp}${file.separator}${batchtest.name}.csv |
| ${batchtest.out}${file.separator}${batchtest.name}.csv |
| </fail> |
| |
| <local name="BatchTestLocal.xml.OK"/> |
| <condition property="BatchTestLocal.xml.OK"> |
| <filesmatch file1="${batchtest.inp}/${batchtest.name}.xml" file2="${batchtest.out}/${batchtest.name}.xml"/> |
| </condition> |
| <fail unless="BatchTestLocal.xml.OK"> |
| XML Files are not identical. |
| ${batchtest.inp}${file.separator}${batchtest.name}.xml |
| ${batchtest.out}${file.separator}${batchtest.name}.xml |
| </fail> |
| |
| <echo level="info">${batchtest.name} output files compared OK</echo> |
| |
| <local name="BatchTestLocal.len"/> |
| <condition property="BatchTestLocal.len"> |
| <length file="${batchtest.out}/${batchtest.name}.log" when="equal" length="0" /> |
| </condition> |
| <fail unless="BatchTestLocal.len"> |
| Error detected in log file. See above. |
| </fail> |
| |
| <deleteworkfiles/> |
| |
| </target> |
| |
| <!-- Additional test scripts --> |
| <target name="batch_scripts"> |
| <antcall target="batchtest"> |
| <param name="batchtest.name" value="HTMLParserTestFile_2"/> |
| </antcall> |
| <antcall target="batchtest"> |
| <!-- Using the same module controller name in command line mode causes NPE --> |
| <param name="batchtest.name" value="Bug47165"/> |
| </antcall> |
| <antcall target="batchtest"> |
| <!-- variable in IPSource failed HTTP request if "Concurrent Pool Size" is enabled --> |
| <!-- N.B. requires access to jmeter.apache.org --> |
| <param name="batchtest.name" value="Bug52310"/> |
| </antcall> |
| <antcall target="batchtest"> |
| <!-- Option Start Next Loop in Thread Group does not mark parent Transaction Sampler in error when an error occurs --> |
| <param name="batchtest.name" value="Bug52968"/> |
| </antcall> |
| |
| <antcall target="batchtest"> |
| <!-- IncludeController : NullPointerException loading script in non-GUI mode if Includers use same element name --> |
| <param name="batchtest.name" value="Bug50898"/> |
| </antcall> |
| |
| <antcall target="batchtest"> |
| <!-- ArrayIndexOutOfBoundsException if "sample_variable" is set in client but not server --> |
| <!-- This is unaffected by the bug; it just checks the script works OK in local mode --> |
| <param name="batchtest.name" value="Bug54685"/> |
| <param name="batchtest.variable" value="sample_variables"/> |
| <param name="batchtest.value" value="REFERENCE,JSESSIONID"/> |
| </antcall> |
| |
| <antcall target="batchtest"> |
| <!-- StackOverflowError with ModuleController in Non-GUI mode if its name is the same as the target node --> |
| <param name="batchtest.name" value="Bug55375"/> |
| </antcall> |
| |
| <antcall target="batchtestserver"> |
| <!-- ArrayIndexOutOfBoundsException if "sample_variable" is set in client but not server --> |
| <!-- This is the actual test --> |
| <param name="batchtest.name" value="Bug54685"/> |
| <param name="batchtest.variable" value="sample_variables"/> |
| <param name="batchtest.value" value="REFERENCE,JSESSIONID"/> |
| </antcall> |
| </target> |
| |
| <!-- Run all batch tests; used by test target --> |
| <target name="_allbatchtests" depends="batchtest,batchtestserver,batch_scripts"> |
| </target> |
| |
| <!-- Generic test target, not intended to be called directly --> |
| <target name="_test"> |
| <!-- |
| The property java.awt.headless is not automatically passed on, |
| because the tests are run in a separate JVM from the build. |
| |
| It is assumed that Gump sets java.awt.headless if required. |
| |
| Set test.headless from the java.awt property, if that |
| is defined, otherwise it us set to "". |
| N.B. if test.headless is already set, it will not be changed |
| This allows the property to be over-ridden by test-headless etc. |
| --> |
| <condition property="test.headless" value="${java.awt.headless}"> |
| <isset property="java.awt.headless"/> |
| </condition> |
| <!-- make sure test.headless is set to something --> |
| <condition property="test.headless" value=""> |
| <not><isset property="java.awt.headless"/></not> |
| </condition> |
| |
| <!-- set build.test.gump to build.test if not already set --> |
| <condition property="build.test.gump" value="${build.test}"> |
| <not><isset property="build.test.gump"/></not> |
| </condition> |
| <echo level="info"> |
| gump.run = ${gump.run} |
| java.awt.headless = ${java.awt.headless} |
| test.headless = ${test.headless} |
| user.dir = ${user.dir} |
| basedir = ${basedir} |
| test dir = ${build.test} |
| test dir gump = ${build.test.gump} |
| testsaveservice.saveout = ${testsaveservice.saveout} |
| test.encoding = ${test.encoding} |
| </echo> |
| <delete quiet="true"> |
| <fileset dir="${basedir}/bin/testfiles" includes="*.jmx.out"/> |
| </delete> |
| <!-- fork="yes" is required or dir attribute is ignored --> |
| <java classname="org.apache.jorphan.test.AllTests" fork="yes" failonerror="true" dir="${basedir}/bin"> |
| <classpath> |
| <fileset dir="${dest.jar.jmeter}" includes="ApacheJMeter.jar"/> |
| <fileset dir="${dest.jar}" includes="*.jar"/> |
| <pathelement location="${build.test}"/> |
| <path refid="classpath"/> |
| </classpath> |
| <jvmarg value="-server"/> |
| <jvmarg value="-Dfile.encoding=${test.encoding}"/> |
| <sysproperty key="java.awt.headless" value="${test.headless}"/> |
| <sysproperty key="testsaveservice.saveout" value="${testsaveservice.saveout}" /> |
| <sysproperty key="gump.run" value="${gump.run}" /> |
| <arg value="${build.test}"/> |
| <arg value="${basedir}/bin/testfiles/jmetertest.properties"/> |
| <arg value="org.apache.jmeter.util.JMeterUtils"/> |
| </java> |
| </target> |
| |
| <!-- |
| In order to run JUnit, both junit.jar and optional.jar need to be on the Ant classpath |
| optional.jar is normally found in ANT_HOME/lib |
| --> |
| <target name="junit" description="Run individual JUnit test"> |
| <mkdir dir="reports"/> |
| <property name="test.format" value="plain"/> |
| <property name="test.case" value="org.apache.jorphan.test.AllTests"/> |
| <junit fork="true" |
| dir="${basedir}/bin" |
| showoutput="false" |
| printsummary="on"> |
| <formatter type="${test.format}" usefile="yes"/> |
| <formatter type="xml"/> |
| <jvmarg value="-Dfile.encoding=${test.encoding}"/> |
| <classpath> |
| <fileset dir="${dest.jar}" includes="*.jar"/> |
| <pathelement location="${build.test}"/> |
| <path refid="classpath"/> |
| </classpath> |
| <test name="${test.case}" todir="reports"/> |
| </junit> |
| </target> |
| |
| <!-- Utility target to collate reports --> |
| <target name="junitreport"> |
| <mkdir dir="reports"/> |
| <junitreport todir="reports"> |
| <fileset dir="reports"> |
| <include name="TEST-*.xml"/> |
| </fileset> |
| <report format="frames" todir="reports"/> |
| </junitreport> |
| </target> |
| |
| <target name="generator_jar" depends="compile-tests" description="Create the test tree generator jar"> |
| <jar jarfile="${dest.jar}/ApacheJMeter_generator.jar" |
| manifest="${build.dir}/MANIFEST_BIN.MF"> |
| <zipfileset file="${resources.meta-inf}/default.notice" |
| fullpath="META-INF/NOTICE" /> |
| <zipfileset file="${resources.meta-inf}/default.license" |
| fullpath="META-INF/LICENSE" /> |
| <fileset dir="${build.test}" includes="**/GenerateTreeGui*.class"/> |
| </jar> |
| </target> |
| |
| <target name="svnCheck" description="Use SVN to get the current revision" unless="disable-svnCheck"> |
| <exec executable="svn" logerror="true" outputproperty="svn.exec.result" failonerror="true" failifexecutionfails="true"> |
| <arg line="info"/> |
| </exec> |
| <loadresource property="svn.revision"> |
| <string value="${svn.exec.result}"/> |
| <filterchain> |
| <linecontains> |
| <contains value="Last Changed Rev: "/> |
| </linecontains> |
| <tokenfilter> |
| <!-- Remove all but the revision number --> |
| <replaceregex pattern=".*: " replace=""/> |
| </tokenfilter> |
| <striplinebreaks/> |
| </filterchain> |
| </loadresource> |
| <echo level="info" message="svn.revision=${svn.revision}"/> |
| </target> |
| |
| <!-- Macro is needed to be able to perform indirect evaluation of property names --> |
| <macrodef name="process_jarfile"> |
| <attribute name="jarname"/> |
| <attribute name="dest.dir" default="${lib.dir}"/> |
| <sequential> |
| <!-- Call all possible targets; these are only executed if the appropriate property is set --> |
| <antcall target="_check_exists"> |
| <param name="file" value="@{dest.dir}/${@{jarname}.jar}"/> |
| <param name="loc" value="${@{jarname}.loc}"/> |
| <param name="jar" value="${@{jarname}.jar}"/> |
| <param name="path" value="@{dest.dir}"/> |
| <param name="md5" value="${@{jarname}.md5}"/> |
| <param name="_checkMD5" value="true"/> |
| </antcall> |
| <antcall target="_check_jarfile"> |
| <param name="loc" value="${@{jarname}.loc}"/> |
| <param name="jar" value="${@{jarname}.jar}"/> |
| <param name="path" value="@{dest.dir}"/> |
| <param name="md5" value="${@{jarname}.md5}"/> |
| <param name="_checkMD5" value="true"/> |
| <param name="zip" value="${@{jarname}.zip}"/> |
| <param name="ent" value="${@{jarname}.ent}"/> |
| <param name="zipprop" value="@{jarname}.zip"/> |
| </antcall> |
| </sequential> |
| </macrodef> |
| |
| <!-- Check if jarfile exists, and set properties for calling zip or jar download --> |
| <target name="_check_jarfile" if="_get_file"> |
| <!-- Check if file exists --> |
| <fail message="Error in build file or calling sequence" if="file.exists"/> |
| <echo level="info">Checking ${jar}</echo> |
| <available file="${path}/${jar}" property="file.exists"/> |
| <condition property="_get_zipfile"> |
| <isset property="${zipprop}"/> |
| </condition> |
| <condition property="_get_jarfile"> |
| <not> |
| <isset property="${zipprop}"/> |
| </not> |
| </condition> |
| <!-- Delete all but the desired version of the file --> |
| <loadresource property="wildCard"> |
| <propertyresource name="jar"/> |
| <filterchain> |
| <tokenfilter> |
| <filetokenizer/> |
| <replaceregex pattern="-\d+\.\d+.*(\.jar|\.zip)" replace="-*\1"/> |
| </tokenfilter> |
| </filterchain> |
| </loadresource> |
| <echo level="info" message="Deleting ${wildCard} (excluding ${jar})"/> |
| <delete verbose="true"> |
| <!-- Unfortunately commons-jexl jars don't have unique prefixes --> |
| <fileset dir="${path}" includes="${wildCard}" excludes="${jar} commons-jexl-*"/> |
| </delete> |
| <!-- Emulate conditional execution; targets use if/unless to suppress execution --> |
| <antcall target="_get_jarfile"/> |
| <antcall target="_get_zipfile"/> |
| </target> |
| |
| <!-- Get a zip file and unpack it --> |
| <target name="_get_zipfile" if="_get_zipfile" unless="file.exists"> |
| <get src="${loc}/${zip}" |
| dest="${build.dir}/${zip}" |
| usetimestamp="true" ignoreerrors="false"/> |
| <unzip dest="${build.dir}" src="${build.dir}/${zip}"> |
| <patternset> |
| <include name="**/${ent}"/> |
| </patternset> |
| <!-- This requires Ant 1.7.0 or later --> |
| <mapper type="flatten"/> |
| </unzip> |
| <antcall target="_checkMD5"> |
| <param name="file" value="${ent}"/> |
| <param name="path" value="${build.dir}"/> |
| <param name="md5" value="${md5}"/> |
| </antcall> |
| <move preservelastmodified="true" overwrite="true" |
| file="${build.dir}/${ent}" tofile="${path}/${jar}" verbose="true"/> |
| </target> |
| |
| <!-- Download a jar file and check its hash; if correct, move to correct directory --> |
| <target name="_get_jarfile" if="_get_jarfile" unless="file.exists"> |
| <echo message="Fetching: ${path}/${jar}" level="info"/> |
| <get src="${loc}/${jar}" |
| dest="${build.dir}/${jar}" |
| usetimestamp="false" ignoreerrors="false"/> |
| <antcall target="_checkMD5"> |
| <param name="file" value="${jar}"/> |
| <param name="path" value="${build.dir}"/> |
| <param name="md5" value="${md5}"/> |
| </antcall> |
| <move preservelastmodified="true" overwrite="true" |
| file="${build.dir}/${jar}" tofile="${path}/${jar}" verbose="true"/> |
| </target> |
| |
| <!-- Ant subroutine, required to localise MD5OK property --> |
| <target name="_checkMD5" if="_checkMD5"> |
| <!-- |
| @param path - location of file |
| @param file - file name |
| --> |
| <checksum algorithm="MD5" file="${path}/${file}" property="MD5"/> |
| <condition property="MD5OK"> |
| <equals arg1="${MD5}" arg2="${md5}" casesensitive="false"/> |
| </condition> |
| <fail unless="MD5OK">Bad Checksum: for ${file} |
| expected ${md5} |
| actual ${MD5}</fail> |
| <echo level="info" message="Checksum OK: ${file}"/> |
| </target> |
| |
| <!-- |
| Generic target to process all external jars. |
| The "process_jarfile" macro resolves the properties that begin with the jarname |
| and calls all the possible targets. The targets use "if" and "unless" to provide |
| conditional execution (it would be a lot easier if antcall supported if/unless). |
| --> |
| <target name="_process_all_jars"> |
| <process_jarfile jarname="apache-bsf"/> |
| <process_jarfile jarname="avalon-framework"/> |
| <process_jarfile jarname="bcmail" dest.dir="${lib.api}"/> |
| <process_jarfile jarname="bcprov" dest.dir="${lib.api}"/> |
| <process_jarfile jarname="bcpkix" dest.dir="${lib.api}"/> |
| <process_jarfile jarname="beanshell"/> |
| <process_jarfile jarname="commons-codec"/> |
| <process_jarfile jarname="commons-collections"/> |
| <process_jarfile jarname="commons-httpclient"/> |
| <process_jarfile jarname="commons-io"/> |
| <process_jarfile jarname="commons-jexl"/> |
| <process_jarfile jarname="commons-jexl2"/> |
| <process_jarfile jarname="commons-lang3"/> |
| <process_jarfile jarname="commons-logging"/> |
| <process_jarfile jarname="commons-net"/> |
| <process_jarfile jarname="excalibur-datasource"/> |
| <process_jarfile jarname="excalibur-instrument"/> |
| <process_jarfile jarname="excalibur-logger"/> |
| <process_jarfile jarname="excalibur-pool"/> |
| <process_jarfile jarname="htmllexer"/> |
| <process_jarfile jarname="htmlparser"/> |
| <process_jarfile jarname="httpclient"/> |
| <process_jarfile jarname="httpcore"/> |
| <process_jarfile jarname="httpmime"/> |
| <process_jarfile jarname="jakarta-oro"/> |
| <process_jarfile jarname="javamail"/> |
| <process_jarfile jarname="jcharts"/> |
| <process_jarfile jarname="jdom"/> |
| <process_jarfile jarname="jms"/> |
| <process_jarfile jarname="rhino"/> |
| <process_jarfile jarname="jodd-core"/> |
| <process_jarfile jarname="jodd-lagarto"/> |
| <process_jarfile jarname="jsoup"/> |
| <process_jarfile jarname="junit"/> |
| <process_jarfile jarname="logkit"/> |
| <process_jarfile jarname="mongo-java-driver"/> |
| <process_jarfile jarname="serializer"/> |
| <process_jarfile jarname="slf4j-api"/> |
| <process_jarfile jarname="slf4j-nop"/> |
| <process_jarfile jarname="soap"/> |
| <process_jarfile jarname="jtidy"/> |
| <process_jarfile jarname="tika-core"/> |
| <process_jarfile jarname="tika-parsers"/> |
| <process_jarfile jarname="velocity" dest.dir="${lib.doc}"/> |
| <process_jarfile jarname="commons-lang" dest.dir="${lib.doc}"/> |
| <process_jarfile jarname="xalan"/> |
| <process_jarfile jarname="xerces"/> |
| <process_jarfile jarname="xml-apis"/> |
| <process_jarfile jarname="xmlgraphics-commons"/> |
| <process_jarfile jarname="xmlpull"/> |
| <process_jarfile jarname="xpp3"/> |
| <process_jarfile jarname="xstream"/> |
| <!-- special --> |
| <antcall target="_process_rsyntaxtextarea"/> |
| </target> |
| |
| <target name="_process_doc_jars"> |
| <process_jarfile jarname="commons-collections"/> |
| <process_jarfile jarname="commons-lang" dest.dir="${lib.doc}"/> |
| <process_jarfile jarname="jdom"/> |
| <process_jarfile jarname="velocity" dest.dir="${lib.doc}"/> |
| </target> |
| |
| <!-- Download all missing jars.--> |
| <target name="download_jars" description="Download any missing jar files"> |
| <!-- build.dir may be needed as a temporary work area --> |
| <mkdir dir="${build.dir}" /> |
| <!-- The directories must exist otherwise the build fails when deleting previous versions --> |
| <mkdir dir="${lib.api}" /> |
| <mkdir dir="${lib.doc}" /> |
| <!-- bcprov jars no longer have the same prefix so the wildcard delete does not work; drop any old ones --> |
| <delete verbose="true"> |
| <fileset dir="${lib.api}" includes="bcmail-jdk15-*.jar bcprov-jdk15-*.jar"/> |
| </delete> |
| <antcall target="_process_all_jars"> |
| <param name="_get_file" value="true"/> |
| </antcall> |
| </target> |
| |
| <target name="download_doc_jars"> |
| <!-- build.dir may be needed as a temporary work area --> |
| <mkdir dir="${build.dir}" /> |
| <antcall target="_process_doc_jars"> |
| <param name="_get_file" value="true"/> |
| </antcall> |
| </target> |
| |
| <target name="_check_exists" if="_check_exists"> |
| <fail message="Invalid call sequence - file.exists should not be defined" if="file.exists"/> |
| <available file="${file}" property="file.exists"/> |
| <fail message="Could not find file ${file}" unless="file.exists"/> |
| <antcall target="_checkMD5"> |
| <param name="file" value="${jar}"/> |
| <param name="path" value="${path}"/> |
| <param name="md5" value="${md5}"/> |
| </antcall> |
| <!--echo level="info" message="Found ${file}"/--> |
| </target> |
| |
| <target name="check_jars" description="Check that all required jar files are present" unless="no_check_jars"> |
| <antcall target="_process_all_jars"> |
| <param name="_check_exists" value="true"/> |
| </antcall> |
| </target> |
| |
| <!-- Special: process to get RSyntaxTextArea--> |
| <target name="_process_rsyntaxtextarea"> |
| <available file="./lib/${rsyntaxtextarea.jar}" property="rsyntaxtextarea.exists"/> |
| <antcall target="_get_rsyntaxtextarea"/> |
| </target> |
| |
| <!-- Get RSyntaxTextArea binary zip file, unpack it, pick up jar file and remove the zip --> |
| <target name="_get_rsyntaxtextarea" unless="rsyntaxtextarea.exists"> |
| <property name="loc" value="${rsyntaxtextarea.loc}"/> |
| <property name="zip" value="${rsyntaxtextarea.name}_${rsyntaxtextarea.version}.zip"/> |
| <property name="jar" value="${rsyntaxtextarea.name}.jar"/> |
| <property name="md5" value="${rsyntaxtextarea.md5}"/> |
| <property name="path" value="./lib"/> |
| <get src="${loc}/${zip}" |
| dest="${build.dir}/${zip}" |
| usetimestamp="true" ignoreerrors="false"/> |
| <unzip dest="${build.dir}" src="${build.dir}/${zip}"> |
| <patternset> |
| <include name="**/${jar}"/> |
| </patternset> |
| <mapper type="flatten"/> |
| </unzip> |
| <antcall target="_checkMD5"> |
| <param name="file" value="${build.dir}/${jar}"/> |
| <param name="path" value="${build.dir}"/> |
| <param name="md5" value="${md5}"/> |
| </antcall> |
| <delete> |
| <fileset dir="${path}" includes="${rsyntaxtextarea.name}-*.jar"/> |
| </delete> |
| <move preservelastmodified="true" overwrite="true" |
| file="${build.dir}/${jar}" tofile="${path}/${rsyntaxtextarea.jar}" verbose="true"/> |
| <delete file="${build.dir}/${zip}"/> |
| </target> |
| |
| <target name="checkstyle"> |
| <taskdef resource="checkstyletask.properties" |
| classpath="${lib.opt}/checkstyle-5.3-all.jar"/> |
| <checkstyle config="checkstyle.xml"> |
| <fileset dir="src" includes="**/*.java"/> |
| <formatter type="plain"/> |
| <formatter type="xml" toFile="build/checkstyle_errors.xml"/> |
| </checkstyle> |
| |
| </target> |
| |
| <target name="sign_dist" |
| description="Sign release artifacts in dist and dist/maven. Usage: ant sign_dist -Dgpg.keyname=key-id [-Dgpg.secretKeyring=path-to-keyring] "> |
| <scriptdef name="gpg" language="beanshell"> |
| <classpath> |
| <pathelement location="${lib.dir}/${beanshell.jar}"/> |
| </classpath> |
| <element name="fileset" type="fileset"/> |
| <![CDATA[ |
| int execcode( String command ) // helper |
| { |
| StringTokenizer st = new StringTokenizer(command); |
| String[] cmdarray = new String[st.countTokens()]; |
| for (int i = 0; st.hasMoreTokens(); i++) { |
| cmdarray[i] = st.nextToken(); |
| } |
| // Merge stderr with stdout so only have to fetch one stream |
| proc = new ProcessBuilder(cmdarray).redirectErrorStream(true).start(); |
| din = new DataInputStream( proc.getInputStream() ); |
| while( (line=din.readLine()) != null ) { |
| print(line); |
| } |
| return this.proc.waitFor(); |
| } |
| keyname = project.getProperty("gpg.keyname"); |
| // Java 1.6 returns void, Java 1.5 returns null |
| if (keyname == void || keyname == null) { |
| self.fail("Please provide the gpg.keyname property"); |
| } |
| keyring = project.getProperty("gpg.secretKeyring"); |
| if (keyring == void || keyring == null) { |
| keyring = "secring.gpg"; // the default |
| } |
| sep=java.io.File.separator; |
| cmd="gpg2 --batch --yes -ba -u " + keyname + " --secret-keyring " + keyring; |
| self.log("Command: "+cmd); |
| filesets = elements.get("fileset"); |
| for (i = 0; i < filesets.size(); ++i) { |
| fileset = filesets.get(i); |
| basedir = fileset.getDir(); |
| self.log("Processing "+basedir); |
| ds = fileset.getDirectoryScanner(); |
| srcFiles = ds.getIncludedFiles(); |
| for (j=0; j < srcFiles.length; j++) { |
| srcFile=srcFiles[j]; |
| file=basedir + sep + srcFile; |
| self.log("Signing "+srcFile); |
| ret=execcode(cmd+ " " + file); |
| if (ret != 0) { |
| self.fail("Command failed: "+ret); |
| } |
| } |
| } |
| ]]> |
| </scriptdef> |
| <gpg> |
| <fileset dir="${dist.dir}" includes="*.*" excludes="*.asc *.md5 *.sha1 *.sha"/> |
| <fileset dir="${maven.dir}" includes="*.*" excludes="*.asc *.md5 *.sha1 *.sha"/> |
| </gpg> |
| </target> |
| </project> |