Ant Problem mit classpath

Hallo,
bin Neustarter mit Ant und habe ein Problem mit einem eigenen Task. Mein Build findet den Task nicht, so dass ich beim Run immer eine Nullpointer-Exception bekomme. Kann jemand helfen?

Hier ist mein Build.xml:

Java:
<project name="EigenerTask" default="use" basedir =".">
	
	<property name = "sourcedir" value="."/>
	<property name="classesdir" value="classes"/>

	
	<target name="clean" description="Delete all generated files">
	    <delete dir="${classesdir}" failonerror="false"/>
	    <delete file="${ant.project.name}.jar"/>
	</target>

	
	<target name="compile" description="Compiles the Task">
	    <mkdir dir="${classesdir}"/>
	    <javac srcdir="${sourcedir}" destdir="${classesdir}"/>
	</target>

	
	<target name="jar" description="JARs the Task" depends="compile">
	    <jar destfile="${ant.project.name}.jar" basedir="${classesdir}"/>
	</target>
	
	
	<target name="use" description="Use the Task" depends="jar">
	    <taskdef name="dateiLaenge" classname="DateiLaenge" classpath="${ant.project.name}.jar" />
		<dateiLaenge/>
		<dateiLaenge filename = "/Users/anjawegner/Documents/workspace/EigenerTask/src/calc.java"/>
		<daeiLaenge/>
	</target>

</project>	
<project name="EigenerTask" default="use" basedir =".">
	
	<property name = "sourcedir" value="."/>
	<property name="classesdir" value="classes"/>

	
	<target name="clean" description="Delete all generated files">
	    <delete dir="${classesdir}" failonerror="false"/>
	    <delete file="${ant.project.name}.jar"/>
	</target>

	
	<target name="compile" description="Compiles the Task">
	    <mkdir dir="${classesdir}"/>
	    <javac srcdir="${sourcedir}" destdir="${classesdir}"/>
	</target>

	
	<target name="jar" description="JARs the Task" depends="compile">
	    <jar destfile="${ant.project.name}.jar" basedir="${classesdir}"/>
	</target>
	
	
	<target name="use" description="Use the Task" depends="jar">
	    <taskdef name="dateiLaenge" classname="DateiLaenge" classpath="${ant.project.name}.jar" />
		<dateiLaenge/>
		<dateiLaenge filename = "/Users/anjawegner/Documents/workspace/EigenerTask/src/calc.java"/>
		<daeiLaenge/>
	</target>

</project>

..und hier der die Datei zum Task:
Java:
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.Project;


import java.io.*;

public class DateiLaenge extends Task {

	private String filename;
	private Project project;

    public void setProject(Project proj) {
        project = proj;
    }
    
	public void setFilename(String filename) {
		this.filename = filename;
	}

	public void execute() throws BuildException {
		File myFHandle = new File(filename);
		String laenge = String.valueOf(myFHandle.length());

		if (!myFHandle.isDirectory()){
			System.out.println("Hallo Task");
			String message = project.getProperty(laenge);
        	project.log("Dateilaenge: " + message + ".", Project.MSG_INFO);
		} else
			project.log("Datei ist Verzeichnis. ", Project.MSG_INFO);	
	}
}
 

fastjack

Top Contributor
Hallo,

diese Aufrufe

[XML]<dateiLaenge/>[/XML]

setzen ja keinen filename, der aber in

Java:
 File myFHandle = new File(filename);

verwendet wird. Das würd ich erstmal abprüfen.

Kompilier mal so, um die Zeilennummern in den Exceptions zu erhalten:

[XML]<javac srcdir="${sourcedir}" destdir="${classesdir}" debug="on"/>[/XML] debug auf on setzen.
 
Zuletzt bearbeitet:

fastjack

Top Contributor
Außerdem brauchst Du noch einen Default-Konstruktor :

Java:
public DateiLaenge() {
    super();
}

und zudem kannst Du das Project-Attribut entfernen. SetProject braucht Du auch nicht. Das Project erhälst Du bereits beim erben von Task, Zugriff erfolgt mit this.project.

Da die Tasks beankonform (leerer public Konstruktor, getter (getXXX, aber bei boolean auch isXXX) und setter-Methoden (setXXX) für alles, was zugreifbar sein soll) sein sollen, würde ich noch den Getter für Filename einbauen:

Java:
    public String getFilename() {
    	  return this.filename;
    }
 
Zuletzt bearbeitet:
Hallo,

danke für die schnelle Antwortt(sorry, bei mir hat´s etwas länger gedauert :)

Habe damit zumindest mal den Taskzugriff hinbekommen, es hakt aber anscheinend noch bei der Rückgabe der gesetzten Property. Habe noch etwas "rumprobiert", Code sieht jetzt so aus:

[XML]<project name="EigenerTask" default="use" basedir =".">

<property name = "sourcedir" value="."/>
<property name="classesdir" value="classes"/>


<target name="clean" description="Delete all generated files">
<delete dir="${classesdir}" failonerror="false"/>
<delete file="${ant.project.name}.jar"/>
</target>


<target name="compile" description="Compiles the Task">
<mkdir dir="${classesdir}"/>
<javac srcdir="${sourcedir}" destdir="${classesdir}" debug="on"/>
</target>


<target name="jar" description="JARs the Task" depends="compile">
<jar destfile="${ant.project.name}.jar" basedir="${classesdir}"/>
</target>


<target name="use" description="Use the Task" depends="jar">
<taskdef name="dateiLaenge" classname="DateiLaenge" classpath="${ant.project.name}.jar" />
<dateiLaenge filename = "/Users/anjawegner/Documents/workspace/EigenerTask/src/Calc.java"/>
<echo message="Property myFile = ${myFile}!"/>
</target>

</project> [/XML]

Java:
import java.io.*;

public class DateiLaenge extends Task {

	private String filename;
	private Project project;
	
	public DateiLaenge() {
	    super();
	}
	
	public String getFilename() {
        return this.filename;
	}
    
	public void setFilename(String filename) {
		this.filename = filename;
	}

	public void execute() throws BuildException {
		File myFHandle = new File(filename);
		String laenge = String.valueOf(myFHandle.length());
		
		System.out.println("Laenge " + laenge);

		
		if (!myFHandle.isDirectory()){
			System.out.println("Hallo Task");
			project.setUserProperty("Laenge myFile", laenge);
		} else
			project.setUserProperty("Laenge myFile", "Datei ist Verzeichnis!");	
	}
}

Der Task wird aufgrufen, Dateilänge wird auch ermittelt, trotzdem bekomme ich für Zeile 26 im Build eine Nullpointer-Exception...
 

fastjack

Top Contributor
Java:
private Project project;

kannst Du auch rausnehmen.

Stattdessen mußt Du das Project benutzen, das Du bereits ererbt hast, von Task

Java:
if (!myFHandle.isDirectory()){
    System.out.println("Hallo Task");
    this.project.setUserProperty("Laenge myFile", laenge);
} else {
    this.project.setUserProperty("Laenge myFile", "Datei ist Verzeichnis!");
}

Vor dem Verarbeiten von filename kann man diesen auch prüfen:
Java:
if (filename == null || filename.length() == 0) {
    throw new XXXException("filename can't be null or empty!");
} else if (!new File(filename).exists()) {
    throw new XXXException("file for filename " + filename + " can't be found!");
}

Je nachdem, wass man prüfen möchte. Das macht die Fehlersuche bei der Anwendung später um einiges leichter. XXXException muß natürlich gegen eine geeignete Exception ausgetauscht werden (BuildException, IllegalArgumentException etc.).
 
Zuletzt bearbeitet:
Leider wird

Java:
 this.project.setUserProperty("Laenge myFile", laenge);

abgelehnt, wenn ich
Java:
private Project project;
rausnehme.

(Hinweis: The field ProjectComponent.project is deprecated).

Das Build läuft zwar durch, bringt aber für den javac-task die Meldungen:
Note: /Users/anjawegner/Documents/workspace/EigenerTask/src/DateiLaenge.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

???? :)

Als echo kommt leider nur: Property myFile = ${myFile}


(Imports habe ich übrigens Folgende - fehlt da noch was?:

Java:
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.Project;
import java.io.*;
 

fastjack

Top Contributor
Java:
        this.project.setUserProperty("myFile", laenge);
    } else
        this.project.setUserProperty("myFile", "Datei ist Verzeichnis!");

der Propertyname "Laenge myFile" ist falsch, es muß nur "myFile" heißen, wenn Du die Property unter "myFile" finden willst. Das mit dem Project funktioniert schon, wirft nur eine "deprecated warning", deshalb wird aber noch laenge nichts abgelehnt. Du mußt mal in der API schauen, welche Variante demnächst benutzt werden soll.

Importe:

Java:
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.Project;
 
 
import java.io.*;
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Problem mit Ant Classpath und Junit: Relative Pfade Tools - Maven, Gradle, Ant & mehr 2
8u3631984 Problem auf Github mit Umstellung auf Spring 3 Tools - Maven, Gradle, Ant & mehr 4
H Maven dependency Problem ? Tools - Maven, Gradle, Ant & mehr 23
H Problem beim Verschieben der main-class -> A jni error has occured, please check... Tools - Maven, Gradle, Ant & mehr 9
I Problem: Maven import extern Lib Tools - Maven, Gradle, Ant & mehr 3
S Binding-Problem von Bibliotheken bei Deployment Tools - Maven, Gradle, Ant & mehr 0
L Apache Wicket problem Tools - Maven, Gradle, Ant & mehr 4
L Maven Encoding Problem bei Resourcen Tools - Maven, Gradle, Ant & mehr 3
C Git Problem Tools - Maven, Gradle, Ant & mehr 3
C Kleines Problem mit Maven und Resourcen. Tools - Maven, Gradle, Ant & mehr 3
R IntelliJ IDEA und Git - Problem Tools - Maven, Gradle, Ant & mehr 2
E Ant Problem mit Abhängigkeiten Tools - Maven, Gradle, Ant & mehr 2
GianaSisters Ant jUnit und Ant Problem Tools - Maven, Gradle, Ant & mehr 2
D [maven] problem mit konfiguration von cargo plugin Tools - Maven, Gradle, Ant & mehr 4
D [Maven] problem mit plugin - es fehlen "dubug informationen" Tools - Maven, Gradle, Ant & mehr 8
H Applet Problem mit Security Exception Tools - Maven, Gradle, Ant & mehr 3
M Maven Problem bei Ersetzung von POM-Properties Tools - Maven, Gradle, Ant & mehr 7
M Applet USB Stick Problem Tools - Maven, Gradle, Ant & mehr 3
D Firmen pom mit eigenem Releasezyklus - Problem Tools - Maven, Gradle, Ant & mehr 2
reibi Maven Problem eclipse_eclipse mit Installed JREs Tools - Maven, Gradle, Ant & mehr 6
F Problem beim Kompilieren ohne IDE Tools - Maven, Gradle, Ant & mehr 5
T Maven Problem by crearting a new project with "mvn archetype:create" Tools - Maven, Gradle, Ant & mehr 2
J Ant Ant Skript Problem mit generischen Datentypen Tools - Maven, Gradle, Ant & mehr 8
reibi Maven resources - Problem Tools - Maven, Gradle, Ant & mehr 4
S Webstart Problem beim Start von Webstart Tools - Maven, Gradle, Ant & mehr 4
H Java Applet Problem beim einbinden in HTML Tools - Maven, Gradle, Ant & mehr 3
G Webstart Problem mit Adressierung bei Laden von Datei aus jar (Webstart) Tools - Maven, Gradle, Ant & mehr 5
F Webstart JNLP Problem mit LIB Tools - Maven, Gradle, Ant & mehr 3
T Problem mit Maven Assembly ... Tools - Maven, Gradle, Ant & mehr 6
S Problem bei Nutzung einer eigenen EJB in einem Servlet Tools - Maven, Gradle, Ant & mehr 2
V applet Java 1.6 -> 1.5 Problem ... wie mit Ant zu lösen? Tools - Maven, Gradle, Ant & mehr 7
E Java Applet - Double Buffering Problem (Flackern) Tools - Maven, Gradle, Ant & mehr 6
M Dringend: Sehr kompliziertes Applet Problem Tools - Maven, Gradle, Ant & mehr 4
H Problem mit einen Applet Tools - Maven, Gradle, Ant & mehr 5
G Problem beim deployen eines Applets Tools - Maven, Gradle, Ant & mehr 8
G Applet Security Problem Tools - Maven, Gradle, Ant & mehr 3
S Problem mit Webstart Tools - Maven, Gradle, Ant & mehr 5
zilti Problem mit Object-Tag Tools - Maven, Gradle, Ant & mehr 3
zilti Applet einbinden: Problem Tools - Maven, Gradle, Ant & mehr 6
N Problem mit Applets in HTML Seite integrieren Tools - Maven, Gradle, Ant & mehr 3
D JFileChooser Problem - Verzweifelt Tools - Maven, Gradle, Ant & mehr 4
G Problem mit JApplet bzw Applet Tools - Maven, Gradle, Ant & mehr 5
J Problem beim schreibenden Dateizugriff Tools - Maven, Gradle, Ant & mehr 7
R problem mit kollision von objekten Tools - Maven, Gradle, Ant & mehr 5
G 2 Problem mit dem ScrollPane Tools - Maven, Gradle, Ant & mehr 2
D Properties File FileInputStream Problem Tools - Maven, Gradle, Ant & mehr 2
B Permissions Problem mit zwei Applets Tools - Maven, Gradle, Ant & mehr 2
P Problem beim Senden einer Datei Tools - Maven, Gradle, Ant & mehr 5
E Problem mit signiertem Applet und Parametern Tools - Maven, Gradle, Ant & mehr 4
C drawImage Problem und Applet not inited Tools - Maven, Gradle, Ant & mehr 7
B Server Problem mit Applet start Tools - Maven, Gradle, Ant & mehr 8
V komisches Problem mit Eclipse - oberste Pixel verdeckt Tools - Maven, Gradle, Ant & mehr 3
U JTextPane Problem Tools - Maven, Gradle, Ant & mehr 15
M Applet JRE Versions Problem Tools - Maven, Gradle, Ant & mehr 3
G Problem mit dem schreiben von Datein auf einem Server Tools - Maven, Gradle, Ant & mehr 11
G Web start problem Tools - Maven, Gradle, Ant & mehr 9
X Problem mit Bilder laden Tools - Maven, Gradle, Ant & mehr 3
J Laufzeitumgebung wechseln --> Problem Tools - Maven, Gradle, Ant & mehr 5
D Problem bei der Ausgabe in einem Applet Tools - Maven, Gradle, Ant & mehr 3
T Java Applet - Problem mit Tastatur Abfrage Tools - Maven, Gradle, Ant & mehr 5
F PQ-Formel berechnen -> kleines Problem Tools - Maven, Gradle, Ant & mehr 3
G Mal wieder ein Problem mit Applet und Bildern. Tools - Maven, Gradle, Ant & mehr 3
P Grundsätzliches Problem, Applet aktutalisieren Tools - Maven, Gradle, Ant & mehr 2
R Gif Animation / Problem Tools - Maven, Gradle, Ant & mehr 4
D Applet Dateizugriff unter UNIX und TextListener Problem Tools - Maven, Gradle, Ant & mehr 19
D Problem beim einbinden von jar und class datei Tools - Maven, Gradle, Ant & mehr 8
R URL Problem Tools - Maven, Gradle, Ant & mehr 5
D Problem mit Applet Tools - Maven, Gradle, Ant & mehr 3
P Eclipse Problem beim JAR-erstellen Tools - Maven, Gradle, Ant & mehr 5
D problem beim auslesen von text aus einem textfeld... Tools - Maven, Gradle, Ant & mehr 15
J Problem mit Panel Tools - Maven, Gradle, Ant & mehr 2
L problem mit java plug-in Tools - Maven, Gradle, Ant & mehr 1
G Problem mit URL Tools - Maven, Gradle, Ant & mehr 3
S Problem: Bild im Applet wird 3-4 Mal geladen Tools - Maven, Gradle, Ant & mehr 5
von Spotz Maven und Spring: "Add to classpath" ? Tools - Maven, Gradle, Ant & mehr 29
L Gradle src-gen zum Classpath hinzufügen Tools - Maven, Gradle, Ant & mehr 0
C Maven Classpath auf verschiedene Ordner setzen Tools - Maven, Gradle, Ant & mehr 8
P Classpath beim Ausführen eines SQL-Scripts per ANT angeben Tools - Maven, Gradle, Ant & mehr 2
G Maven Maven, Eclipse Plugins und Classpath Tools - Maven, Gradle, Ant & mehr 15
C Ant target für Eclipse .classpath Tools - Maven, Gradle, Ant & mehr 6
G Classpath in Manifest? Tools - Maven, Gradle, Ant & mehr 4
E wie übergibt man classpath-variable Tools - Maven, Gradle, Ant & mehr 4

Ähnliche Java Themen

Neue Themen


Oben