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
>
>

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to