Avatar billede soreno Praktikant
19. december 2004 - 11:48 Der er 12 kommentarer og
1 løsning

ant og classpath/libraries

Jeg kunne godt bruge et eksempel på en build.xml fil som kan kompilere nedenstående kode:
import java.io.*;
import java.text.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.apache.xerces.parsers.*;

public class SaxParser extends DefaultHandler
{
    public void startElement(String uri, String localName,
                String qname, Attributes atts)
    {
    System.out.println(localName);
    }

    public void characters(char []ch, int start, int length)
    {
    System.out.println(new String(ch, start, length));
    }

    public void endElement(String uri, String localName, String qname)
    {   
    System.out.println(localName);
    }

    public static void main(String args[])
    {
    System.setProperty("org.xml.sax.driver",
              "org.apache.xerces.parsers.SAXParser");
    try
    {
        SaxParser handler = new SaxParser();
        XMLReader reader = XMLReaderFactory.createXMLReader();
        reader.setContentHandler(handler);
        reader.parse(args[0]);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    }
}

Problemet med min nuværende build.xml er at jeg ikke kan få ant til at forstå at den skal kigge i lib/ for at finde alle jar filerne.

Så hvordan gøres det ?

Min nuværende build.xml ser ca. sådan ud (det er en del af en større sammenhæng):
<?xml version="1.0" encoding="ISO-8859-1" ?>

<project name="javacode" default="help" basedir=".">
  <property name="src" value="src"></property>
  <property name="bin" value="bin"></property>
  <property name="lib" value="lib"></property>
  <property name="build.compiler.source" value="1.5"/>
   
  <!-- Jar Files -->
  <property name="?????" value="lib/????"/>
   
  <!-- Classpath -->
  <path id="_classpath">
      <pathelement path="${bin}"/>
      <pathelement path="${lib}"/>
  </path>
 
  <path id="_srcpath">
    <pathelement path="${src}"/>
  </path>

  <target name="prepare">
    <mkdir dir="${bin}"></mkdir>
  </target>
 
  <target name="build_src" depends="prepare">
    <javac
      destdir="${bin}"
      debug="on"
      target="1.5"
      source="1.5">
      <src> <path refid="_srcpath"/> </src>
      <classpath> <path refid="_classpath"/> </classpath>
    </javac>
  </target>

  <target name="saxparser" depends="build_src">
    <java
      fork="yes" classname="SaxParser">
      <classpath> <path refid="_classpath"/> </classpath>
    </java>
  </target>
</project>

Jeg formoder det er <!-- Jar Files --> delen der er i udu.
Avatar billede arne_v Ekspert
19. december 2004 - 11:52 #1
Den simple løsning er jo:

<property name="foobarlib" value="lib/foobar.jar"/>

og

<javac classpath="${foobarlib}" ...
Avatar billede arne_v Ekspert
19. december 2004 - 11:55 #2
Den avancerede er:

<path id="foobarlibs">
    <fileset dir="lib">
        <include name="**/*.jar"/>
    </fileset>
</path>

og

<javac classpathref="foobarlibs"  ...
Avatar billede soreno Praktikant
19. december 2004 - 11:56 #3
Men hvis jeg så har 15 libs, så er det ikke særligt modulært.
Med mindre man kan lave en collection af libs (hvilket jeg har prøvet på med _classpath).
Avatar billede soreno Praktikant
19. december 2004 - 12:00 #4
Ok den avancerede løsning klarede problemet.

Men hvordan kan man så angive parametre til targets via shellen ?
F.eks. hvis jeg vil parse build.xml, så kunne jeg godt tænke mig at kunne skrive noget ala:
ant SaxParser build.xml
Avatar billede arne_v Ekspert
19. december 2004 - 12:01 #5
out of the box kan du:

ant targetnavn

eller

ant -f build.xml targetnavn
Avatar billede soreno Praktikant
19. december 2004 - 12:04 #6
Men jeg vil gerne give targetnavn et argument.
F.eks.
kunne jeg builde med:
javac [..] SaxParser.java
java SaxParser build.xml

Det kunne jeg godt tænke mig overført til ant, så jeg kan skrive:
ant saxparser build.xml
Avatar billede arne_v Ekspert
19. december 2004 - 12:06 #7
ant -Dprogram=SaxParser.java

og brug

${program}
Avatar billede soreno Praktikant
19. december 2004 - 12:07 #8
(Jeg vil gerne køre build.xml gennem parseren).
Avatar billede soreno Praktikant
19. december 2004 - 12:09 #9
Det kan tilsyneladende hardcodes med arg:

  <target name="saxparser" depends="build_src">
    <java
      fork="yes" classname="SaxParser">
      <classpath> <path refid="_classpath"/> </classpath>
      <arg value="build.xml"/>
    </java>
  </target>
Avatar billede soreno Praktikant
19. december 2004 - 12:11 #10
Det er fint nok for mig indtil videre.

Læg et svar.
Avatar billede arne_v Ekspert
19. december 2004 - 12:11 #11
Du bruger build.xml til at køre et program som læser build.xml ?
Avatar billede arne_v Ekspert
19. december 2004 - 12:12 #12
ok
Avatar billede soreno Praktikant
19. december 2004 - 12:18 #13
Det er fordi jeg vil lave en pretty printer til build.xml :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester