Hi Matt and Jan, Thanks to both of you as I am closer but I think I am still missing a piece. I am now getting a successful build but the resulting jar is not finding the classes in the external jars. When I run the jar I get this exception:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/HttpEntity at KCBSEvents.Registration.isRegistered(Unknown Source) at KCBSEvents.KCBSEvents.main(Unknown Source) Caused by: java.lang.ClassNotFoundException: org.apache.http.HttpEntity at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 2 more That happens to be the first attempt to execute one of the external jar classes which is a Maven dependency. Here is my new build.xml: <?xml version="1.0" encoding="UTF-8"?> <project name="KCBSEvents" default="jar" basedir="."> <property name="build.properties" value="build.properties"/> <property name="resources" value="resource" /> <property name="jardir" value="KCBSEvents" /> <property name="KCBSDir" value="src/KCBSEvents" /> <property name="member.number" value="000000" /> <property name="member.name" value="" /> *<property name="jarpath" value="/${user.home}/.m2/repository" />** ** <path id="compile-jars">** ** <multirootfileset basedirs="${jarpath}/commons-io/2.5,${jarpath}/httpcomponents-client,${jarpath}/commons-logging/1.2,${jarpath}/commons-codec/1.10,/lib/java-ext/json-simple-1.1.1">** ** <include name="commons-io-2.5.jar" />** ** <include name="httpclient-4.5.6.jar" />** ** <include name="httpcore-4.4.10.jar" />** ** <include name="commons-logging-1.2.jar" />** ** <include name="commons-codec-1.10.jar" />** ** <include name="json-simple-1.1.1.jar" />** ** </multirootfileset>** ** </path>* <target name="checkOS"> <condition property="isWindows"> <os family="windows" /> </condition> <condition property="isLinux"> <os family="unix" /> </condition> </target> <target name="if_windows" depends="checkOS" if="isWindows"> <property name="jarfile" value="C:\temp\KCBSEvents.jar" /> <property name="antcontrib" value="H:\html\Applets\ant-contrib" /> </target> <target name="if_linux" depends="checkOS" if="isLinux"> <property name="jarfile" value="/tmp/${member.number}/KCBSEvents.jar" /> <property name="antcontrib" value="/var/www/html/Applets/ant-contrib/ant-contrib-1.0b3.jar" /> </target> <target name="setclass" depends="if_linux,if_windows"> <taskdef resource="net/sf/antcontrib/antcontrib.properties"> <classpath> <pathelement location="${antcontrib}" /> </classpath> </taskdef> </target> <target name="incserial" depends="setclass"> <copy todir="bin/${jardir}/${resources}"> <fileset dir="${KCBSDir}/${resources}"> <include name="${build.properties}" /> </fileset> <filterchain> <expandproperties /> </filterchain> </copy> <if> <isset Property="build.number" /> <then> <echo message="update build requested" /> </then> <else> <echo message="new build requested" /> <buildnumber /> </else> </if> <propertyfile file="bin/${jardir}/${resources}/${build.properties}"> <entry key="serialnumber" value="${build.number}" /> <entry key="membernumber" value="${member.number}" /> <entry key="name" value="${member.name}" /> </propertyfile> <echo message="serial number: ${build.number}" /> </target> <target name="jar" description="Compile serialized jar" depends="incserial,if_windows,if_linux"> <echo message="Using destination file ${jarfile}" /> <javac srcdir="src" destdir="bin" includeantruntime="false" *classpathref="compile-jars"* /> <jar destfile="${jarfile}" basedir="bin" filesetmanifest="mergewithoutmain"> <manifest> <attribute name="Manifest-Version" value="1.0"/> <attribute name="Created-By" value="ant 1.9.2 on CentOS 7" /> <attribute name="Main-Class" value="KCBSEvents.KCBSEvents" /> </manifest> *<!-- zipfilesets removed -->* </jar> </target> </project> Does this come back to my question about needing the zipfileset elements for the Maven jars? I don't know how the pom.xml for Maven gets pulled into this either. On 2/17/2019 12:45 PM, Matt Bertolini wrote: > Hi Dennis, > > I think you might be mixing up Eclipse concepts and Ant concepts and that > might be causing some extra confusion. Based on your original email, the > compiler is having issues finding your third-party dependencies. I believe > Jaikiran is correct in saying that the <javac> task needs to be given some > sort of classpath. The .classpath file is an Eclipse concept and unless > there is some sort of Eclipse/Ant plugin I am not aware of, the .classpath > file will have no effect on Ant’s, <javac> task. Also, I don’t believe the > <javac> task has a default value for the classpath attribute. If no > classpath or classpathref is specified then the compiler is not passed any > classpath information. > > I would start by locating the folder where your third-party dependencies > are and create a <path> element containing them like this: > > <path id="compile-classpath"> > <fileset dir="/the/path/to/your/third/party/jars"/> > </path> > > Once you have a path defined you can pass the classpath to the <javac> task > using a refid like this: > > <javac srcdir="src" destdir="bin" includeantruntime="false" > classpathref="compile-classpath"/> > > Try that and see how it goes. > > Matt Bertolini > >
signature.asc
Description: OpenPGP digital signature