Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole (https://www.delphipraxis.net/162851-%5Bjava-ant%5D-ant-build-skript-funktioniert-nicht-bei-start-aus-konsole.html)

Luckie 7. Sep 2011 11:03


[Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe hier ein Ant Build Script:
Code:
<?xml version="1.0"?>

<project name="Clover" default="" basedir=".">
   <description>Build file</description>
   
   <property name="src_dir" location="./src"/>
   <property name="srcTest_dir" location="./srcTest"/>
   <property name="bin_dir" location="./bin"/>      
      
    <target name="CloverSetup">
      <clover-setup initstring="CloverDB/clover_coverage.db"/>
    </target>

   <target name="Cleanup">
      <delete verbose="true">
         <fileset dir="${bin_dir}">            
             <include name="*.class"/>      
         </fileset>
      </delete>
   </target>
   
   <target name="BuildProject">
      <mkdir dir="${bin_dir}"/>
      <javac destdir="${bin_dir}" verbose="true">         
         <src>
            <pathelement location="${src_dir}"/>
            <pathelement location="${srcTest_dir}"/>
         </src>            
      </javac>
   </target>
   
   <target name="UnitTests">
      <junit printSummary="true" showOutput="true">   
         <formatter type="brief" usefile="false"/>
         <classpath >
            <pathelement location="${bin_dir}"/>         
         </classpath>
         <batchtest>
            <fileset dir="${bin_dir}">
               <include name="*Test.class"/>
            </fileset>
         </batchtest>         
      </junit>
   </target>
   
   <target name="CloverReportHTML">
      <clover-report>
         <current outfile="report_html">
            <format type="html"/>
         </current>
      </clover-report>
   </target>
   <target name="CloverReportXML">
         <clover-report>
            <current outfile="report_xml\report.xml">
               <format type="xml"/>
            </current>
         </clover-report>
   </target>
</project>
Wenn ich es auch Eclipse aus ausführe, klappt alles wunderbar. Rufe ich es über die Konsole auf mit
Code:
ant -v -k -buildfile build.xml
erhalte ich folgende Ausgabe:
Zitat:

Apache Ant(TM) version 1.8.2 compiled on December 20 2010
Buildfile: C:\Dokumente und Einstellungen\mp\Eigene Dateien\Datawerk\Projekte\Java Unit Testing Build Automation\Demos\AntClover\build.xml
Detected Java version: 1.6 in: C:\Programme\Java\jre6
Detected OS: Windows XP
parsing buildfile C:\Dokumente und Einstellungen\mp\Eigene Dateien\Datawerk\Projekte\Java Unit Testing Build Automation\Demos\AntClover\build.xml with URI = file:/C:/Dokumente%20und%20Einstellungen/mp/Eigene%20Dateien/Datawerk/Projekte/Java%20Unit%20Testing%20Build%20Automation/Demos/AntClover/build.xml
Project base dir set to: C:\Dokumente und Einstellungen\mp\Eigene Dateien\Datawerk\Projekte\Java Unit Testing Build Automation\Demos\AntClover
parsing buildfile jar:file:/C:/Programme/Ant/lib/ant.jar!/org/apache/tools/ant/antlib.xml with URI = jar:file:/C:/Programme/Ant/lib/ant.jar!/org/apache/tools/ant/antlib.xml from a zip file

BUILD SUCCESSFUL
Total time: 0 seconds
Allerdings wurde nichts compiliert und der Clover Report wurde auch nicht erstellt.

Im Build Dialog sind noch Classpath Variablen deklariert. Muss ich die auch im Build Skript deklarieren, wenn ich das Script über die Konsole ausführe? Und wenn ja, wie muss ich sie deklarieren?

mjustin 7. Sep 2011 17:06

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Zum Ausführen eines Targets in der build.xml braucht man nur ant <target> einzugeben.

Zum Beispiel:

Code:
ant Cleanup
Standardmäßig wird die build.xml als Buildskript verwendet.

Das Projekt verwendet kein Default-Target, daher passiert bei einfachem Aufruf von ant ohne einen Targetnamen nichts.

Luckie 7. Sep 2011 18:27

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Ach so. Aber wie sage ich Ant wo er die Build.xml mit der Target findet? Und wie kann ich mehrere Targets hintereinander ausführen?

mjustin 8. Sep 2011 08:59

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Zitat:

Zitat von Luckie (Beitrag 1122473)
Ach so. Aber wie sage ich Ant wo er die Build.xml mit der Target findet? Und wie kann ich mehrere Targets hintereinander ausführen?

ant -? hilft da weiter:

Zum Angeben eines bestimmten buildfiles:

Code:
ant -f <file>  use given buildfile
Zum Ausführen mehrerer Targets zum Beispiel:

Code:
ant target1 target2 target3
Oder mit depends attributen in der target Definition, diese können auch Listen abhängiger targets enthalten.

Code:
<target name="build-distribution" depends="compile,test,zip">
  ...
</target>

Luckie 8. Sep 2011 09:56

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Äh ja, hätte ich auch drauf kommen können.

Mein Aufruf sieht jetzt so aus:
Code:
ant -f "C:\Dokumente und Einstellungen\mp\Eigene Dateien\Datawerk\Projekte\Java Unit Testing Build Automation\Demos\AntClover\build.xml" CloverSetup Cleanup BuildProject UnitTests CloverReportHTML CloverReportXML > build.log
pause
Aber in der Logdatei steht nur
Zitat:

Buildfile: C:\Dokumente und Einstellungen\mp\Eigene Dateien\Datawerk\Projekte\Java Unit Testing Build Automation\Demos\AntClover\build.xml

CloverSetup:
Und passieren tut auch nichts.

Was könnte ich denn noch falsch machen?

Luckie 9. Sep 2011 10:52

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
OK, irgendwas mit Clover stimmt da nicht. Ich habe es mal rausgenommen.
Code:
ant Cleanup BuildProject UnitTests CloverReportHTML CloverReportXML > build.log
So jetzt findet er die JUnit nicht. ich habe schon alle Varianten ausprobiert mit <classpath>. Aber es will nicht.
Zitat:

[javac] [loading java\lang\Object.class(java\lang:Object.class)]
[javac] C:\Dokumente und Einstellungen\mp\Eigene Dateien\Datawerk\Projekte\Java Unit Testing Build Automation\Demos\AntClover\srcTest\CalcTest.java:7 : package org.junit does not exist
[javac] import static org.junit.Assert.*;
Code:
<classpath>
      <pathelement path="${classpath}"/>
      <pathelement location="lib/helper.jar"/>
    </classpath>
Zitat:

failed to create task or type classpath Cause: The name is undefined.
Wie macht man es richtig?

mjustin 9. Sep 2011 11:45

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Die Dokumentation zum JUnit Task in Ant ist hier:

http://ant.apache.org/manual/Tasks/junit.html

es gibt fünf Möglichkeiten, die erste ("Put both junit.jar and ant-junit.jar in ANT_HOME/lib") ist am einfachsten.

Die vierte, mit <classpath> Anweisungen für beide JUnit Dateien (junit.jar und ant-junit.jar), geht nur innerhalb eines taskdef Elements, d.h. man würde junit als neuen Task definieren, das geht, ist aber umständlich weil es junit als Task ja schon gibt.

Luckie 9. Sep 2011 11:51

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
ja, die Doku habe ich auch gefunden, nur war sie nicht sehr hilfreich.

Ich habe es jetzt so probiert:
Code:
<path id="classpath.junit">
       <pathelement location="C:/Programme/Eclipse/plugins/org.junit4_4.3.1/junit.jar" />      
   </path>

<target name="UnitTests">      
      <junit printSummary="true" showOutput="true">
         <classpath refid="classpath.junit" />
         <formatter type="brief" usefile="false"/>
         <classpath >
            <pathelement location="${bin_dir}"/>         
         </classpath>
         <batchtest>
            <fileset dir="${bin_dir}">
               <include name="*Test.class"/>
            </fileset>
         </batchtest>         
      </junit>
   </target>
Das will auch nicht.

Eigentlich wollte ich es ja vermeiden Dateien rumzukopieren. Werde ich aber dann wohl machen.

Vielen Dank für deine Hilfe.

mjustin 9. Sep 2011 11:58

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Zitat:

Zitat von Luckie (Beitrag 1122917)
Ich habe es jetzt so probiert:
Code:
...      
      <junit printSummary="true" showOutput="true">
         <classpath refid="classpath.junit" />
         ...
         </batchtest>         
      </junit>
Das will auch nicht.

Das classpath Element innerhalb von junit ist nur dazu da, den classpath zu setzen den die von junit kompilierten und ausgeführten Klassen benötigen.

Den classpath von junit kann man hier nicht mehr setzen, das muss schon vorher geschehen, damit JUnit überhaupt ausgeführt werden kann. u.a. kann man auch Ant per -lib Parameter den Pfad zu JUnit übergeben, dann muss man keine Dateien kopieren.

Luckie 9. Sep 2011 12:00

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Ich habe sie jetzt einfach kopiert. Geht. Jetzt muss ich nur noch Clover mit Ant zum laufen bringen. :? Da verabschiedet er sich einfach:
Zitat:

Buildfile: C:\Dokumente und Einstellungen\mp\Eigene Dateien\Datawerk\Projekte\Java Unit Testing Build Automation\Demos\AntClover\build.xml

Cleanup:
[delete] Deleting C:\Dokumente und Einstellungen\mp\Eigene Dateien\Datawerk\Projekte\Java Unit Testing Build Automation\Demos\AntClover\bin\Calc.class
[delete] Deleting C:\Dokumente und Einstellungen\mp\Eigene Dateien\Datawerk\Projekte\Java Unit Testing Build Automation\Demos\AntClover\bin\CalcTest.class

CloverSetup:
Aufruf:
Code:
ant Cleanup CloverSetup BuildProject UnitTests CloverReportHTML CloverReportXML > build.log

alcaeus 10. Sep 2011 07:02

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Moin Luckie,

beachte bitte dass Eclipse eine eigene Ant-Installation mitbringt. Wenn du die im Path verlinkt hast, ist alles super und die Libraries sind da. Wenn du aber eine eigene Ant-Installation gemacht hast verwenden Eclipse und dein "normales" Ant verschiedene Library-Verzeichnisse, in denen eventuell nicht alle benoetigten Libraries vorhanden sind.

Ein paar kleine Tipps zu Ant:
  • Das default-Attribut im project-Tag gibt an, welches Target standardmaessig ausgefuehrt wird. Dann brauchst du nur noch "ant" auszufuehren und schon laeuft alles ;)
  • Wenn du den Targets eine Description gibst, kannst du dir mit "ant -p" anzeigen lassen, welche Targets es gibt und was sie machen. Das ist praktisch wenn man mal mit fremden Ant-Files konfrontiert wird. In der Liste werden Targets ohne Description gar nicht angezeigt - so kannst du sie nach aussen hin wenigstens verschleiern.
  • Zu den Classpaths: benutze nie absolute Pfade. Verwende stattdessen die Property ${ant.library.dir} um dich ins lib-Verzeichnis deiner Ant-Installation leiten zu lassen, wo das Zeug liegen sollte.

Greetz
alcaeus

Luckie 10. Sep 2011 10:27

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Ich habe jetzt alles zum Laufen bekommen. allerdings war das eigentlich nur ein Teilerfolg. Ich dachte, wenn ich es von der Konsole aus zum Laufen bringe, dann läuft es auch aus Bamboo raus, aber das war ein Trugschluss. :(

alcaeus 10. Sep 2011 15:44

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Zitat:

Zitat von Luckie (Beitrag 1123110)
Ich habe jetzt alles zum Laufen bekommen. allerdings war das eigentlich nur ein Teilerfolg. Ich dachte, wenn ich es von der Konsole aus zum Laufen bringe, dann läuft es auch aus Bamboo raus, aber das war ein Trugschluss. :(

Nein, schliesslich musst du auch schauen dass auf dem Bamboo-Server alles noetige installiert ist. Was genau laeuft denn in Bamboo nicht?

Greetz
alcaeus

Luckie 10. Sep 2011 16:00

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Ich habe Bamboo lokal installiert und es läuft als Service. Ant ist lokal installiert (außerhalb Eclipse) und Clover auch noch mal lokal (außerhalb Eclipse). In der Konfiguration kann ich Ant über die Konsole aufrufen und das Projekt wird Compiliert, die JUnit Test werden ausgeführt und der Clover Report wird erstellt. Mit Bamboo habe ich für jede Ant Target einen Job/Task erstellt. Wenn ich den Plan aber ausführe, bekomme ich zum Schluss eine Fehlermeldung, mit der ich nichts anfangen kann. Wie sie genau heißt, kann ich jetzt nicht sagen, da muss ich im Büro am Monat nachgucken. aber ich werde auch noch mal gucken, ob man bei Bamboo im Administratoren Panel noch was konfigurieren muss/kann.

Luckie 12. Sep 2011 09:44

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
So, ich habe noch mal von vorne angefangen und in Bamboo für das Projekt einen neuen Plan erstellt, basierend auf dieser Build-XML Datei:
Code:
<?xml version="1.0"?>

<project name="Clover" default="" basedir=".">
   <description>Build file</description>
   
   <property name="src_dir" location="./src"/>
   <property name="srcTest_dir" location="./srcTest"/>
   <property name="bin_dir" location="./bin"/>   
   
   <property name="clover.jar" location="C:/Programme/Clover/lib/clover.jar"/>
   <taskdef resource="cloverlib.xml" classpath="${clover.jar}"/>
      
    <target name="CloverSetup">
      <clover-setup initstring="CloverDB/clover_coverage.db"/>
    </target>

   <target name="Cleanup">
      <delete verbose="true">
         <fileset dir="${bin_dir}">            
             <include name="*.class"/>      
         </fileset>
      </delete>
   </target>
   
   <target name="BuildProject">
      <mkdir dir="${bin_dir}"/>
      <javac destdir="${bin_dir}" verbose="true">         
         <src>
            <pathelement location="${src_dir}"/>
            <pathelement location="${srcTest_dir}"/>
         </src>            
      </javac>
   </target>
   
   <target name="UnitTests">      
      <junit printSummary="true" showOutput="true">         
         <!-- <formatter type="brief" usefile="false"/> -->
         <formatter type="xml"/>
         <classpath >
            <pathelement location="${bin_dir}"/>
            <pathelement path="${clover.jar}"/>
         </classpath>
         <batchtest>
            <fileset dir="${bin_dir}">
               <include name="*Test.class"/>
            </fileset>
         </batchtest>         
      </junit>
   </target>
   
   <target name="CloverReportHTML">
      <clover-report>
         <current outfile="report_html">
            <format type="html"/>
         </current>
      </clover-report>
   </target>
   
   <target name="CloverReportXML">
         <clover-report>
            <current outfile="report_xml\report.xml">
            <!-- <current outfile="C:\Dokumente und Einstellungen\mp\bamboo-home\xml-data\build-dir\FB-TD-JOB1\report.xml"> -->
               <format type="xml"/>
            </current>
         </clover-report>
   </target>
</project>
Diese kann ich mit Ant über die Konsole aufrufen und es wird jede Target ausgeführt. Diese Build-Datei funktionieert also.

Jetzt habe ich mit Bamboo einen neuen Plan erstellt und dort einen Task angelegt, der nur die Target "Cleanup" ausführt. Es wird kein Report generiert. Und nach dem der Plan ausgeführt wurde bekomme ich folgende Fehlermeldung:
Zitat:

No failed tests found, a possible compilation error occurred.
Die Target wurde auch nicht ausgeführt. In dem Verzeichnis befinden sich weiterhin die alten Dateien.

mjustin 12. Sep 2011 09:51

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Zitat:

Zitat von Luckie (Beitrag 1123158)
Ich habe Bamboo lokal installiert und es läuft als Service.


Unter welchem Benutzeraccount? Bei Hudson (oder Jenkins) als Service ist es oft besser einen anderen als den Systemaccount zu verwenden, dem Rechte oder Umgebungsvariablen fehlen können.

Luckie 12. Sep 2011 09:57

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Ich habe den Dienst als Administrator gestartet. Aber was sollte ihm fehlen? Den Pfad zu Ant habe ich bei Bamboo konfiguriert. Wo der Plan die Build-XML Datei findet habe ich ihm auch gesagt.

alcaeus 12. Sep 2011 19:09

AW: [Java, Ant] Ant Build Skript funktioniert nicht bei Start aus Konsole
 
Da ich selbst Jenkins benutze und bisher die Finger von Bamboo gelassen hab muss ich mich leider dumm stellen :stupid:

Kannst du bei Bamboo irgendwelche Parameter fuer den Ant-Aufruf konfigurieren? Wenn ja, kannst du Ant bitte mit -v (fuer verbose) oder noch besser -d (fuer Debug) starten und gucken ob da was rauskommt? Ich kenne es von Jenkins dass man dort die Kommandozeilenausgabe des Builds angucken kann und damit nachvollziehen kann, warum oder weshalb der Build fehlgeschlagen ist.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz