How to execute java class file using ant?

Viewed 23

I am facing below error while trying to execute java class from apache ant target.
Please note that 'javac' command works fine and creates DeploymentTracker.class file. Issue is with 'java' command.
I am not able to attach directory structure screenshot so will try to explain the directory structure below.
Here,
1. 'ci' is the root directory.
2. Build file 'deploy-bpm.daa.xml' file path is 'ci/scripts/applications/deploy-bpm.daa.xml'.
3. Java class file path is 'ci/trackdeployment/DeploymentTracker.class'.
4. Java code contains package declaration 'package trackdeployment;'
5. Java code has dependency on 'ci/lib/ojdbc8.jar'

Directory Structure:

Ant Target:

<target name="update-deployment-details-in-db" description="Insert new or update existing entry in DB">
    <property file="${basedir}/../../target/artifact/${bpm.app.name}.properties"/>
    <propertyfile file="${basedir}/../../target/artifact/${bpm.app.name}.properties" comment="properties file for @{bpm-app-name} application">
        <entry key="Environment" value="${application.target.environment}"/>
    </propertyfile>
    <javac srcdir="${basedir}/../../trackdeployment" destdir="${basedir}/../../trackdeployment" classpath="${basedir}/../../lib/*.jar" debug="on" source="1.8" includeAntRuntime="false"/>
    <java classname="trackdeployment.DeploymentTracker">
        <arg value="${bpm.app.name}"/>
        <classpath>
            <pathelement location="${basedir}/../../lib/ojdbc8.jar"/>
            <pathelement path="${java.class.path}"/>
        </classpath>
    </java>
</target>

Error:

C:\code\myappv>ant -f ci/scripts/applications/deploy-bpm-daa.xml -Dapplication.target.environment=DEV -Dbpm.environment.name=BPMEnvironment -Dbpm.app.name=notifications update-deployment-details-in-db
Buildfile: C:\code\myappv\ci\scripts\applications\deploy-bpm-daa.xml

update-deployment-details-in-db:
[propertyfile] Updating property file: C:\code\myappv\ci\target\artifact\notifications.properties
    [javac] Compiling 1 source file to C:\code\myappv\ci\trackdeployment
     [java] Could not find trackdeployment.DeploymentTracker. Make sure you have it in your classpath
     [java]     at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:141)
     [java]     at org.apache.tools.ant.taskdefs.Java.run(Java.java:891)
     [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:231)
     [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:135)
     [java]     at org.apache.tools.ant.taskdefs.Java.execute(Java.java:108)
     [java]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:299)
     [java]     at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
     [java]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     [java]     at java.lang.reflect.Method.invoke(Method.java:498)
     [java]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
     [java]     at org.apache.tools.ant.Task.perform(Task.java:350)
     [java]     at org.apache.tools.ant.Target.execute(Target.java:449)
     [java]     at org.apache.tools.ant.Target.performTasks(Target.java:470)
     [java]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1401)
     [java]     at org.apache.tools.ant.Project.executeTarget(Project.java:1374)
     [java]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
     [java]     at org.apache.tools.ant.Project.executeTargets(Project.java:1264)
     [java]     at org.apache.tools.ant.Main.runBuild(Main.java:818)
     [java]     at org.apache.tools.ant.Main.startAnt(Main.java:223)
     [java]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:284)
     [java]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:101)
     [java] Java Result: -1

BUILD SUCCESSFUL
Total time: 3 seconds

C:\code\myappv>

Output of <echo message="Classpath set is ${java.class.path}"/>:

[echo] Classpath set is C:\apps\apache\ant\lib\ant-launcher.jar;C:\apps\apache\ant\lib\ant-antlr.jar;C:\apps\apache\ant\lib\ant-apache-bcel.jar;C:\apps\apache\ant\lib\ant-apache-bsf.jar;C:\apps\apache\ant\lib\ant-apache-log4j.jar;C:\apps\apache\ant\lib\ant-apache-oro.jar;C:\apps\apache\ant\lib\ant-apache-regexp.jar;C:\apps\apache\ant\lib\ant-apache-resolver.jar;C:\apps\apache\ant\lib\ant-apache-xalan2.jar;C:\apps\apache\ant\lib\ant-commons-logging.jar;C:\apps\apache\ant\lib\ant-commons-net.jar;C:\apps\apache\ant\lib\ant-imageio.jar;C:\apps\apache\ant\lib\ant-jai.jar;C:\apps\apache\ant\lib\ant-javamail.jar;C:\apps\apache\ant\lib\ant-jdepend.jar;C:\apps\apache\ant\lib\ant-jmf.jar;C:\apps\apache\ant\lib\ant-jsch.jar;C:\apps\apache\ant\lib\ant-junit.jar;C:\apps\apache\ant\lib\ant-junit4.jar;C:\apps\apache\ant\lib\ant-junitlauncher.jar;C:\apps\apache\ant\lib\ant-launcher.jar;C:\apps\apache\ant\lib\ant-netrexx.jar;C:\apps\apache\ant\lib\ant-swing.jar;C:\apps\apache\ant\lib\ant-testutil.jar;C:\apps\apache\ant\lib\ant-xz.jar;C:\apps\apache\ant\lib\ant.jar;C:\Program Files\Java\jdk1.8.0_202\lib\tools.jar

Can you please help?

1 Answers

After spending some time on stackoverflow, updated my ant target as below and it is working now...

Did below changes:

  1. Started deleting .class file before compiling java code.

  2. Added path with name 'app-lib-classpath' and added same in java task.

  3. Added .class file directory into classpath of java task.

     <target name="update-deployment-details-in-db" description="Insert new or update existing entry in DB">
         <property file="${basedir}/../../target/artifact/${bpm.app.name}.properties"/>
         <propertyfile file="${basedir}/../../target/artifact/${bpm.app.name}.properties" comment="properties file for @{bpm-app-name} application">
             <entry key="Environment" value="${application.target.environment}"/>
         </propertyfile>
         <delete failonerror="true" verbose="true">
             <fileset dir="${basedir}/../../trackdeployment" includes="**/*.class"/>
         </delete>
         <path id="app-lib-classpath">
             <fileset dir="${basedir}/../../lib">
                 <include name="**/*.jar" />
             </fileset>
         </path>
         <javac srcdir="${basedir}/../../trackdeployment" destdir="${basedir}/../../trackdeployment" debug="true" source="1.8" includeAntRuntime="false">
             <classpath refid="app-lib-classpath"/>
         </javac>
         <echo message="Classpath set is ${java.class.path}"/>
         <java classname="trackdeployment.DeploymentTracker">
             <arg value="${bpm.app.name}"/>
             <classpath>
                 <pathelement location="${basedir}/../../trackdeployment" />
                 <path refid="app-lib-classpath"/>
                 <pathelement path="${java.class.path}"/>
             </classpath>
         </java>
     </target>
    
Related