# ant - nach erster Warning kein output mehr



## guni (5. Jun 2009)

Hallo, bin neu im bereich ant und ich habe mal eine ant-datei zum deploy mehrerer jar's erstellt.
das rennt auch scoweit durch, nur, dass meine ant nach der ersten warning (javac) keinen output mehr gibt.

woran liegt das?

mfg, guni


----------



## mvitz (5. Jun 2009)

Ohne, dass du die Ant Datei postest, wird dir wohl höchst wahrscheinlich niemand helfen können.


----------



## guni (9. Jun 2009)

ant script sieht so aus ...

[XML]<?xml version="1.0" encoding="UTF-8"?>
<project name="sag schnittstellen" default="all" basedir=".">

	<property name="build.compiler.warnings" value="off"/>

	<property name="build.dir" value="C:/build" />
	<property name="java.home" value="T:/OraCdb10g/jdk" />
	<property name="lohnadmcdb.home" value="V:/lohnadmcdb" />
	<property name="lohnadmcdb.lib" value="${lohnadmcdb.home}/lib" />
	<property name="cdbdevkit.dir" value="T:\cdb_devkit" />

	<target name="clean">
		<delete dir="${build.dir}" />
	</target>

	<target name="init">
		<antcall target="clean" />
		<mkdir dir="${build.dir}" />
	</target>

	<target name="_compilegeneral" description="compiles the general lib for leSalaire">
		<antcall target="init" />
		<javac srcdir="../General" includes="**/*.java" destdir="${build.dir}">
			<classpath>
				<pathelement location="${lohnadmcdb.home}" />
				<pathelement location="${lohnadmcdb.lib}/activation.jar" />
				<pathelement location="${lohnadmcdb.lib}/axis.jar" />
				<pathelement location="${lohnadmcdb.lib}/cdb-devkit-bpel.jar" />
				<pathelement location="${lohnadmcdb.lib}/cdb-devkit-client.jar" />
				<pathelement location="${lohnadmcdb.lib}/cdb-devkit-server.jar" />
				<pathelement location="${lohnadmcdb.lib}/classes12.jar" />
				<pathelement location="${lohnadmcdb.lib}/commons-discovery-0.2.jar" />
				<pathelement location="${lohnadmcdb.lib}/commons-logging-1.0.3.jar" />
				<pathelement location="${lohnadmcdb.lib}/content.jar" />
				<pathelement location="${lohnadmcdb.lib}/content-ws-client.jar" />
				<pathelement location="${lohnadmcdb.lib}/http_client.jar" />
				<pathelement location="${lohnadmcdb.lib}/jaxrpc.jar" />
				<pathelement location="${lohnadmcdb.lib}/ldapjclnt10.jar" />
				<pathelement location="${lohnadmcdb.lib}/mail.jar" />
				<pathelement location="${lohnadmcdb.lib}/ojdbc14.jar" />
				<pathelement location="${lohnadmcdb.lib}/repository.jar" />
				<pathelement location="${lohnadmcdb.lib}/saaj.jar" />
				<pathelement location="${lohnadmcdb.lib}/servlet.jar" />
				<pathelement location="${lohnadmcdb.lib}/trusted-app-utility.jar" />
				<pathelement location="${lohnadmcdb.lib}/wsdl4j-1.5.1.jar" />
				<pathelement location="${lohnadmcdb.lib}/xml.jar" />
				<pathelement location="${lohnadmcdb.lib}/xmlmesg.jar" />
				<pathelement location="${lohnadmcdb.lib}/xmlparserv2.jar" />
			</classpath>
		</javac>
	</target>

	<target name="_jargeneral" depends="_compilegeneral" description="creates jar file for the general lib of leSalaire">
		<jar destfile="C:\Entwicklung\javabin\general.jar" basedir="${build.dir}" includes="**/*.class" manifest="C:\Entwicklung\programm\javaprog\General\MANIFEST.MF" />
	</target>

	<target name="compilesagparsers" description="creates build for sagparsers">
		<antcall target="init" />
		<javac srcdir="." includes="**/*.java" destdir="${build.dir}">
			<classpath>
				<pathelement location="C:\Entwicklung\javabin\general.jar" />
			</classpath>
		</javac>
	</target>

	<target name="jarsagparsers" depends="compilesagparsers" description="creates jar file for the sag parsers">
		<jar destfile="C:\Entwicklung\javabin\sagparsers.jar" basedir="${build.dir}" includes="**/*.class" manifest="C:\Entwicklung\programm\javaprog\SAG Schnittstellen\MANIFEST.MF" />
	</target>

	<target name="copyjars">
		<copy file="C:\Entwicklung\javabin\general.jar" tofile="V:\javabin\lib\general.jar" />
		<copy file="C:\Entwicklung\javabin\sagparsers.jar" tofile="V:\javabin\SAG_sagparsers.jar" />

		<copy file="C:\Entwicklung\javabin\general.jar" tofile="U:\javabin\lib\general.jar" />
		<copy file="C:\Entwicklung\javabin\sagparsers.jar" tofile="U:\javabin\SAG_sagparsers.jar" />
	</target>

	<target name="all" depends="_jargeneral,jarsagparsers" description="creates jar files to run sag parsers">
		<antcall target="copyjars" />
	</target>

</project>[/XML]

output sieht so aus ...

Buildfile: C:\Entwicklung\programm\javaprog\SAG Schnittstellen\build.xml
_compilegeneral:
init:
clean:
   [delete] Deleting directory C:\build
    [mkdir] Created dir: C:\build
    [javac] Compiling 6 source files to C:\build
    [javac] C:\Entwicklung\programm\javaprog\General\src\com\eurofunk\general\LsCrypt.java:52: warning: unmappable character for encoding UTF8


----------



## mvitz (9. Jun 2009)

Mit welchem Editor schreibst du denn so? Da scheint was mit der Zeichenkodierung nicht zu passen.

Btw <antcall> ist böse! Für das was du da machst, kann man bei den targets auch die depends="target" nutzen.


----------



## guni (16. Jun 2009)

was passt mit der Zeichenkodierung nicht?!

das problem bei depends war, dass der entsprechende block dann nur ein einziges mal im ganzen durchlauf aufgerufen wurde -> antcall ...

lg, guni


----------



## mvitz (16. Jun 2009)

Kp, wie erstellst du denn deine .java Dateien?

Das eine dependency nur einmal abgearbeitet wird ist normal und soll auch so sein, wenn du ein target öfters brauchst, ist in den meisten Fällen dein Gedankengang falsch.

Wenn ich mir deine Datei angucke, so brauchst du nur init 2mal aufrufen und selbst das ist meiner Meinung nach nicht nötig. Somit kann man mit depends einen schönen Abhängigkeitsgraphen aufbauen, den Ant dann abbaut.


----------



## SvenK (16. Jun 2009)

habi55 hat gesagt.:


> Btw <antcall> ist böse!


Klär mich mal bitte auf, was ist daran böse?


----------



## mvitz (16. Jun 2009)

SvenK hat gesagt.:


> Klär mich mal bitte auf, was ist daran böse?



[QUOTE="Ant in Action", Seite 208]As Ant creates a new project on every <antcall>, the build will be slow and memory hungry, with common targets being called repeatedly.
Except for targets that you want to call more than once, especially with different parameters, let Ant handle the order of targets by listing them in the dependencies attributes of other tasks.
[/QUOTE]

Das Script oben macht (bis auf evtl. einmal) genau dies, anstatt mit dependencies zu arbeiten z.B. <target name="init" dependencies="delete", ruft er in delete init auf und genau das sollte eben vermieden werden. Das Prinzip zieht sich bei ihm durch das ganze Script durch.


----------



## guni (19. Jun 2009)

ok ...
kurz gesagt:
ich will ein ant script schreiben, dass verschiedene Projekte kompiliert, den bulid dann in jars umwandelt die dann in mehrere Verzeichnisse (Netzlaufwerke) kopiert werden.

mein 1. problem: 
ich habe ein init-target. es erstellt einen neuen build-ordner.
dann sollen nach der reihe die projekte kompiliert werden und jeweils eine jar darus erstellt werden.
mein problem ist, dass ich den build-ordner für jedes projekt gern wieder frei hätte ...
wenn ich meine all-target jetzt so ausführe, dass ich init als dependancy setze, dann wird init nur ein einziges mal ausgeführt; der build-ordner wird also zwischen den kompilierungsvorgängen nicht mehr gelöscht. meine lösung: antcall.
gibt es da was besseres?!

mein 2. problem:
sobald bei irgendeiner kompilierung eine warning auftritt, bekomm ich keinen ant-output mehr :-(

mein 3. problem:
ich hab in eclipse ein projekt mit verschiedenen packages.
möchte mich beim kompilieren sagen 
package_a.subpackage_1.* -> first.jar
package_a.subpackage_2.* -> second.jar
wie kann ich das mit ant lösen?!

bitte um hilfe.
mfg, guni


----------



## mvitz (19. Jun 2009)

guni hat gesagt.:


> ok ...
> kurz gesagt:
> ich will ein ant script schreiben, dass verschiedene Projekte kompiliert, den bulid dann in jars umwandelt die dann in mehrere Verzeichnisse (Netzlaufwerke) kopiert werden.
> 
> ...



Evtl könntest du ja das ganze so lösen:

```
build
|- project_a
|- project_b
 - project_c
```

Dann in die unter Ordner kompilieren, kopieren etc. und anschließend das jar erstellen.



guni hat gesagt.:


> mein 2. problem:
> sobald bei irgendeiner kompilierung eine warning auftritt, bekomm ich keinen ant-output mehr :-(



komisch, kenne ich leider nicht.



guni hat gesagt.:


> mein 3. problem:
> ich hab in eclipse ein projekt mit verschiedenen packages.
> möchte mich beim kompilieren sagen
> package_a.subpackage_1.* -> first.jar
> ...



So:

```
<jar basedir="X" destfile="Y/first.jar">
  <fileset includes="package_a/subpackage_1/**" />
</jar>
```


----------



## guni (19. Jun 2009)

hmm ... die warnungen treten hauptsächlich im zusammenhang mit umlauten auf:
warning: unmappable character for encoding UTF8

wie kann ich solche warnungen unterdrücken?!


----------



## mvitz (19. Jun 2009)

Umlaute worin? Dateinamen, Ordner, Java Quelltexte? Generell solltest du umlaute prinzipiell beim programmieren vermeiden.


----------



## guni (19. Jun 2009)

... ja. ich hab sie in meinen javadoc-Kommentaren jetzt in die HTML-Codierung geändert.
Sonst hab ich sie in Kommentaren drin und manchmal in Pfaden von Ordnern, die ich in meinem Quelltext aufrufe.
Muss ich sie jetzt echt überall ändern, damit ich einen vollständigen ant-output bekomme?
ich versteh das nicht. 
kann es sein, dass ant in eclipse standardmäßig irgendwie so konfiguriert ist, dass es seinen output bei jeder warning abbricht?!
das ist extrem störend weil ich nämlich dann nie mit sicherheit sagen kann, ob mein build wirklich erfolgreich durchgelaufen ist!

lg, guni


----------



## guni (19. Jun 2009)

kann mir da denn keiner weiterhelfen?!


----------



## maki (19. Jun 2009)

Welches encoding ist denn für den Eclipse Workspace eingestellt?


----------



## guni (24. Jun 2009)

hmm ... encoding war auf 'Default (Cp1252)'
... hab es auf UTF-8 geändert. Jetzt geht's!! Danke!!
war mir eine riesen Hilfe!


----------

