Add library jar files in Java Task? - java

The spark-de.jar used other jar files as libraries. Assume running spark-de.jar requires lib1.jar and lib2.jar, how to set them in the following Java task of Ant?
<target name="makeQuery">
<java classname="sparkDemo.SparkTest" failonerror="true">
<classpath>
<pathelement location="${basedir}/spark-de.jar"/>
</classpath>
</java>
</target>

This should do the trick:
<target name="makeQuery">
<java classname="sparkDemo.SparkTest" failonerror="true">
<classpath>
<pathelement location="${basedir}/spark-de.jar"/>
<pathelement location="${basedir}/lib1.jar"/>
<pathelement location="${basedir}/lib2.jar"/>
</classpath>
</java>
</target>

Related

How to add jar operation using ant

I am trying to run a jar file and execute some unit tests. Currently (without ant) I do it like this
java -jar ./rest-test-runner-0.0-all.jar run HelpServiceUrlTest -config ./tools/rest-test-config/srv13/
That would run me a test class that was specified. How can I do exactly the same (or run all tests) using ant ?
I have this so far. It starts and ends with success but does not execute any test
<target name="run-tests" depends="prepare">
<java jar="rest-test-runner-0.0-all.jar"
fork="true"
failonerror="true"
maxmemory="128m">
<classpath>
<pathelement location="rest-test-runner-0.0-all.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
<jvmarg value="-Dconfig=srv10"/>
</java>
The following snippet will do exactly the same as the command line you provided
<target name="run-tests" depends="prepare">
<java jar="rest-test-runner-0.0-all.jar"
fork="true"
failonerror="true"
maxmemory="128m">
<classpath>
<pathelement location="rest-test-runner-0.0-all.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
<arg line="run HelpServiceUrlTest -config ./tools/rest-test-config/srv13/"/>
</java>

Prepend to ant classpath instead of append

Below is a sample ant file for the purpose of this question.
Target "test1" is called from "test" using antcall. Now, when I have some classes having same fully qualified class names, I want the classes from test1.jar to be loaded first but it looks like test1.jar is appended to the classpath and hence classes from test.jar are picked instead.
Is there any way to reset/clear the classpath for target test1 or prepend test1.jar to the classpath so that classes from it are loaded.
<project name="TestProj" basedir=".">
<target name="test">
<java inputstring="" fork="true" failonerror="true" dir=".">
<classpath>
<fileset dir="C:/bb/" includes="test.jar"/>
</classpath>
</java>
</presetdef>
<antcall target="test1"/>
</target>
<target name="test1">
<java inputstring="" fork="true" failonerror="true" dir=".">
<classpath>
<path location="c:/test1.jar"/>
</classpath>
<jvmarg line="-Xms64m -Xmx512m"/>
<jvmarg line="-Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true"/>
</java>
</presetdef>
</target>
</project>
Try the following:
<path id="test.classpath">
<fileset dir="C:/bb/" includes="test.jar"/>
<path refid="compile.classpath"/>
</path>
<path id="test1.classpath">
<pathelement location="c:/test1.jar"/>
</path>
<project name="TestProj" basedir=".">
<target name="test">
<java inputstring="" fork="true" failonerror="true" dir=".">
<classpath>
<path refid="test.classpath"/>
</classpath>
</java>
</presetdef>
<antcall target="test1"/>
</target>
<target name="test1">
<java inputstring="" fork="true" failonerror="true" dir=".">
<classpath>
<path refid="test1.classpath"/>
</classpath>
<jvmarg line="-Xms64m -Xmx512m"/>
<jvmarg line="-Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true"/>
</java>
</presetdef>
</target>

Eclipse don't recognize test folder as source folder when importing ant build file

I have an ant build file for a java project the project tree looks like this :
DataBaseFidling.
|-->src (contains production code source)
|-->tests (contains tests code source)
|-->bin (contains .class)
|-->reports(contains junit xml reports)
|-->build.xml
Whenever I import this project with eclipse using "Java Project From Existing Ant Build File", eclipse does not reconize the tests folder as a source folder.
What to do to fix this?
Here is the ant build file :
The DatabaseFidling Project.
<property name="src.dir" location="./src/" />
<property name="tests.dir" location="./tests/" />
<property name="bin.dir" location="./bin/" />
<property name="lib.dir" location="/home/chedy/workspace/lib"/>
<target name="clean">
<delete verbose="true">
<fileset dir="${bin.dir}"/>
</delete>
</target>
<target name="compile">
<javac srcdir="${src.dir}" destdir="${bin.dir}">
</javac>
<javac srcdir="${tests.dir}" destdir="${bin.dir}">
<classpath>
<pathelement location="${lib.dir}/junit4.jar"/>
<pathelement location="${lib.dir}/mockito-all-1.9.5.jar"/>
<pathelement location="${lib.dir}/SQLScriptRunner.jar"/>
</classpath>
</javac>
</target>
<target name="test" depends="compile">
<junit printsummary="yes" fork="true" >
<formatter type="xml"/>
<classpath>
<pathelement path="${bin.dir}"/>
<pathelement location="${lib.dir}/junit4.jar"/>
<pathelement location="${lib.dir}/mockito-all-1.9.5.jar"/>
<pathelement location="${lib.dir}/SQLScriptRunner.jar"/>
<pathelement location="${lib.dir}/mysql-connector-java-5.1.23-bin.jar" />
</classpath>
<batchtest todir="./report">
<fileset dir="${bin.dir}">
<include name="**/**Test*.*"/>
</fileset>
</batchtest>
</junit>
</target>
<target name="run" depends="compile">
<java classname="com.esprit.is.Main" fork="true">
<classpath>
<pathelement path="${bin.dir}"/>
<pathelement location="${lib.dir}/mysql-connector-java-5.1.23-bin.jar" />
</classpath>
</java>
</target>
</project>
You can manually add the test folder as a source folder. Right click the project, Build Path -> Configure Build Path -> Java Build Path. In the Source tab, click Link Source then browse to your folder.
The compile target had to contain one javac task which compiles both the src and test folders.

Eclipse Ant Build is not not compiling in Jenkins

I am trying to schedule the following ANT build in jenkins to execute a java class. When I run the build configuration in Eclipse it compiles and excutes my java class. When I schedule and execute the build.xml in Jenkins it executes the build but fails to compile my java class. It then marks the build as completed successfully. I am running ANT Version 1.8.4 and Java version 1.7.0_03 in both eclipse and jenkins. I am not sure why Jenkins is failing to compile the class?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- WARNING: Eclipse auto-generated file.
Any modifications will be overwritten.
To include a user specific buildfile here, simply create one in the same
directory with the processing instruction <?eclipse.ant.import?>
as the first entry and export the buildfile again. -->
<project basedir="." default="build" name="Sel_Framework_Grid">
<property environment="env"/>
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.7"/>
<property name="source" value="1.7"/>
<path id="TestNG.libraryclasspath">
<pathelement location="../../../.eclipse/com.springsource.sts_2.9.1.RELEASE_1574885722/plugins/org.testng.eclipse_6.7.0.20120802_0752/lib/testng.jar"/>
</path>
<path id="Sel_Framework_Grid.classpath">
<pathelement location="bin"/>
<pathelement location="lib/activation.jar"/>
<pathelement location="lib/apache-mime4j-0.6.jar"/>
<pathelement location="lib/axis.jar"/>
<pathelement location="lib/bsh-1.3.0.jar"/>
<pathelement location="lib/cglib-nodep-2.1_3.jar"/>
<pathelement location="lib/commons-codec-1.4.jar"/>
<pathelement location="lib/commons-collections-3.2.1.jar"/>
<pathelement location="lib/commons-discovery.jar"/>
<pathelement location="lib/commons-exec-1.1.jar"/>
<pathelement location="lib/commons-io-2.0.1.jar"/>
<pathelement location="lib/commons-jxpath-1.3.jar"/>
<pathelement location="lib/commons-lang-2.6.jar"/>
<pathelement location="lib/commons-logging-1.1.1.jar"/>
<pathelement location="lib/commons-logging.jar"/>
<pathelement location="lib/cssparser-0.9.5.jar"/>
<pathelement location="lib/cxf-2.5.2.jar"/>
<pathelement location="lib/geronimo-activation_1.1_spec-1.1.jar"/>
<pathelement location="lib/geronimo-annotation_1.0_spec-1.1.1.jar"/>
<pathelement location="lib/geronimo-javamail_1.4_spec-1.7.1.jar"/>
<pathelement location="lib/geronimo-stax-api_1.0_spec-1.0.1.jar"/>
<pathelement location="lib/guava-10.0.1.jar"/>
<pathelement location="lib/hamcrest-all-1.1.jar"/>
<pathelement location="lib/htmlunit-2.9.jar"/>
<pathelement location="lib/htmlunit-core-js-2.9.jar"/>
<pathelement location="lib/httpclient-4.1.2.jar"/>
<pathelement location="lib/httpcore-4.1.3.jar"/>
<pathelement location="lib/httpmime-4.1.2.jar"/>
<pathelement location="lib/jaxb-api-2.2.3.jar"/>
<pathelement location="lib/jaxb-impl-2.2.4-1.jar"/>
<pathelement location="lib/jaxb-xjc-2.2.4-1.jar"/>
<pathelement location="lib/jaxen-core.jar"/>
<pathelement location="lib/jaxen-jdom.jar"/>
<pathelement location="lib/jaxrpc.jar"/>
<pathelement location="lib/jcommander-1.13.jar"/>
<pathelement location="lib/jcspclasses.jar"/>
<pathelement location="lib/jdom.jar"/>
<pathelement location="lib/jna-3.3.0.jar"/>
<pathelement location="lib/json-20080701.jar"/>
<pathelement location="lib/junit-dep-4.10.jar"/>
<pathelement location="lib/jython.jar"/>
<pathelement location="lib/log4j-1.2.8.jar"/>
<pathelement location="lib/mail.jar"/>
<pathelement location="lib/neethi-3.0.1.jar"/>
<pathelement location="lib/nekohtml-1.9.15.jar"/>
<pathelement location="lib/operadriver-v0.8.1.jar"/>
<pathelement location="lib/phwclasses.jar"/>
<pathelement location="lib/protobuf-java-2.4.1.jar"/>
<pathelement location="lib/saaj.jar"/>
<pathelement location="lib/sac-1.3.jar"/>
<pathelement location="lib/saxpath.jar"/>
<pathelement location="lib/serializer-2.7.1.jar"/>
<pathelement location="lib/sqljdbc4.jar"/>
<pathelement location="lib/stax2-api-3.1.1.jar"/>
<pathelement location="lib/velocity-1.7.jar"/>
<pathelement location="lib/woodstox-core-asl-4.1.1.jar"/>
<pathelement location="lib/wsdl4j-1.6.2.jar"/>
<pathelement location="lib/wsdl4j.jar"/>
<pathelement location="lib/xalan-2.7.1.jar"/>
<pathelement location="lib/xercesImpl-2.9.1.jar"/>
<pathelement location="lib/xml-apis-1.3.04.jar"/>
<pathelement location="lib/xml-resolver-1.2.jar"/>
<pathelement location="lib/xmlschema-core-2.0.1.jar"/>
<pathelement location="lib/AspriseJavaPDF-free.jar"/>
<pathelement location="lib/im4java-1.3.1-1.5.jar"/>
<pathelement location="lib/im4java-1.3.1.jar"/>
<pathelement location="lib/antlr-runtime-3.4.jar"/>
<pathelement location="lib/jna-3.4.0.jar"/>
<pathelement location="lib/testng-6.5.1.jar"/>
<pathelement location="lib/testng-6.5.1.zip"/>
<pathelement location="lib/slf4j-api-1.6.4.jar"/>
<pathelement location="lib/slf4j-nop-1.6.4.jar"/>
<pathelement location="lib/dom4j-1.6.1.jar"/>
<pathelement location="lib/poi-3.8-20120326.jar"/>
<pathelement location="lib/netty-3.2.7.Final.jar"/>
<pathelement location="lib/webbit-0.4.8-SNAPSHOT.jar"/>
<pathelement location="lib/dbunit-2.4.8-compatibileWithPoi-3.5-XLSXSupport.jar"/>
<pathelement location="lib/poi-ooxml-3.8-20120326.jar"/>
<pathelement location="lib/poi-ooxml-schemas-3.8-20120326.jar"/>
<pathelement location="lib/xbean.jar"/>
<pathelement location="lib/Aspose.Words.jdk16.jar"/>
<pathelement location="lib/ojdbc14.jar"/>
<pathelement location="lib/selenium-java-2.24.1-srcs.jar"/>
<pathelement location="lib/selenium-java-2.24.1.jar"/>
<pathelement location="lib/vim25.jar"/>
<path refid="TestNG.libraryclasspath"/>
</path>
<target name="init">
<mkdir dir="bin"/>
<copy includeemptydirs="false" todir="bin">
<fileset dir="src">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="bin"/>
</target>
<target depends="clean" name="cleanall"/>
<target depends="build-subprojects,build-project" name="build"/>
<target name="build-subprojects"/>
<target depends="init" name="build-project">
<echo message="${ant.project.name}: ${ant.file}"/>
<javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}">
<src path="src"/>
<classpath refid="Sel_Framework_Grid.classpath"/>
</javac>
</target>
<target name="BaseSet Test">
<java classname="BaseSet" failonerror="true" fork="yes">
<arg line="C:\temp\testng-customsuite.xml c:\Jenkinstest Firefox,IE,EN,Ready"/>
<classpath refid="Sel_Framework_Grid.classpath"/>
</java>
</target>
Jenkins Console Output
Started by user anonymous
Building in workspace C:\Users\blank\Documents\workspace-sts-2.9.1.RELEASE\Sel_Framework_Grid
[Sel_Framework_Grid] $ cmd.exe /C '"C:\AutomatedTesting\apache-ant-1.8.4-bin\apache-ant-1.8.4\bin\ant.bat -file buildA.xml -Dbuild.sysclasspath=false -buildfile C:\Users\blank\Documents\workspace-sts-2.9.1.RELEASE\Sel_Framework_Grid\buildA.xml && exit %%ERRORLEVEL%%"'
Buildfile: C:\Users\blank\Documents\workspace-sts-2.9.1.RELEASE\Sel_Framework_Grid\buildA.xml
build-subprojects:
init:
build-project:
[echo] Sel_Framework_Grid: C:\Users\blank\Documents\workspace-sts-2.9.1.RELEASE\Sel_Framework_Grid\buildA.xml
build:
BUILD SUCCESSFUL
Total time: 0 seconds
Finished: SUCCESS
Eclipse Console Output
Buildfile: C:\Users\blank\Documents\workspace-sts-2.9.1.RELEASE\Sel_Framework_Grid\buildf.xml
build-subprojects:
init:
build-project:
[echo] Sel_Framework_Grid: C:\Users\blank\Documents\workspace-sts-2.9.1.RELEASE\Sel_Framework_Grid\buildf.xml
[javac] C:\Users\blank\Documents\workspace-sts-2.9.1.RELEASE\Sel_Framework_Grid\buildf.xml:
build:
BaseSet Test:
[java] [TestNG] Running:
[java] C:\temp\testng-customsuite.xml
It seems you are not specifying a set of targets to run from your Jenkins build. This means the default target "build" will be run:
<target depends="build-subprojects,build-project" name="build"/>
The target "BaseSet Test" is one running your java class. Appears to be missing. I'd suggest altering your Jenkins job to run the following targets instead
build, BaseSet Test

java ant buildfile for project with dependencies

I am new to ant, but am trying to create an ant script that builds my current proeject with another project as a dependency. I have the ant script building my current project, but am unsure how to add the other project to the classpath. Neither project get put into jar files at the moment.
My current portion of the build.xml file is
<target name="run" depends="compile">
<java classname="com.mypackage.Main">
<classpath>
<pathelement location="../project1/out"/>
<pathelement location="${bin}"/>
</classpath>
</java>
</target>
Thanks for your help!
I was able to do it using
<target name="run" depends="compile">
<java classname="com.mypackage.Main" fork="true">
<classpath>
<dirset dir="${other.dir}">
<include name="out/**"/>
</dirset>
<pathelement location="${bin}" />
</classpath>
</java>
</target>
Where ${other.dir} is the relative path to the root of the other project.

Categories