# JAVA Spring ant build.xml



## planb2000 (24. Januar 2009)

Hallo @All,

nachdem ich mehrere Stunden probiert habe und leider nicht weiterkomme die Frage an Euch:
-- Ich baue eine Aplication mit ANT -> funktioniert wunderbar
-- jetzt habe ich Spring mit am Wickel und möchte das das sog. Context.xml file mit per ANT eingebunden wird.

Meine Frage wie macht man das Grundsätzlich? Ich habe Euch das build.xml (ant) mit beigefügt. Wie stelle ich die Verbindung zum Spring-Context her?

Für Hilfe wäre ich sehr dankbar, da ich ständig Fehlermeldungen (ist mit angefügt)  bekomme die ich leider nicht zuordnen kann... ;o( 

Inhalt build.xml

```
<project name="UseADevice" basedir="." default="main">

    <property name="src.dir"     value="src"/>

    <property name="build.dir"   value="build"/>
    <property name="classes.dir" value="${build.dir}/classes"/>
    <property name="jar.dir"     value="${build.dir}/jar"/>
    <property name="lib.dir"     value="lib"/>


    <property name="main-class"  value="com.spring.DeviceAssembler"/>
    <path id="classpath">
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
    </path>
    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>

    <target name="compile">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
    </target>

    <target name="jar" depends="compile">
        <mkdir dir="${jar.dir}"/>
        <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
            </manifest>
        </jar>
    </target>

    <target name="run" depends="jar">
        <java fork="true" classname="${main-class}">
            <classpath>
                <path refid="classpath"/>
                <path location="${jar.dir}/${ant.project.name}.jar"/>
            </classpath>
        </java>
    </target>
    <target name="clean-build" depends="clean,jar"/>

    <target name="main" depends="clean,run"/>

</project>
```

inhalt von der spring-context.xml

```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="useDevice" class="com.springbook.ArrayListDevice">
        <property name="company">
            <value>"The Device Factory im spring context"</value>
        </property>
     
        </bean>
        <bean id="commandLineView" class="com.springbook.CommandLineView">
            <property name="useDevice">
                 <ref bean="useDevice"/>
            </property>

        </bean>
    </beans>
```

inhalt der fehler der geworfen wird:

```
Buildfile: build_neu.xml

clean:
   [delete] Deleting directory E:\Work\SpringExample\build

compile:
    [mkdir] Created dir: E:\Work\SpringExample\build\classes
     Compiling 8 source files to E:\Work\SpringExample\build\classes
     Note: E:\Work\SpringExample\src\com\springbook\ArrayListUseDevice.java uses unchecked or unsafe operations.
     Note: Recompile with -Xlint:unchecked for details.

jar:
    [mkdir] Created dir: E:\Work\SpringExample\build\jar
      [jar] Building jar: E:\Work\SpringExample\build\jar\UseADevice.jar

run:
      [ArrayListUseDevice.java, CommandLineView.java, Device.java, ListRelayDevices.jsp, UseADeviceAssembler.java, UseDevice.java]
      Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
      	at org.springframework.util.ClassUtils.<clinit>(ClassUtils.java:73)
      	at org.springframework.core.io.DefaultResourceLoader.<init>(DefaultResourceLoader.java:52)
      	at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:198)
      	at org.springframework.context.support.AbstractRefreshableApplicationContext.<init>(AbstractRefreshableApplicationContext.java:80)
      	at org.springframework.context.support.AbstractXmlApplicationContext.<init>(AbstractXmlApplicationContext.java:58)
      	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:119)
      	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:66)
      	at com.springbook.UseADeviceAssembler.main(Unknown Source)
      Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
      	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
      	at java.security.AccessController.doPrivileged(Native Method)
      	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
      	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
      	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
      	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
      	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
      	... 8 more

main:

BUILD SUCCESSFUL
Total time: 2 seconds
```


----------



## Oliver Gierke (27. Januar 2009)

Dir fehlt commons logging im classpath. Solltest du im lib Verzeichnis der Spring Distro finden. Im Idealfall: Ant gegen Maven tauschen . Desweiteren hast du wohl ein reichlich betagtes Beispiel rausgekramt. Spring DTDs sind schon arg alt. Sinnvoller ist es, die XSD zu nutzen.

Gruß
Ollie


----------

