2013-02-12 7 views
5

Wir verwenden exec-maven-plugin, um RequireJS-Optimierer (r.js) unter Node.js (weil es viel schneller als Rhino) zu laufen:Fehlermeldungen irgendwo entlang exec-maven-plugin> Node.js> r.js

Das Problem ist, dass, wenn es irgendwelche Probleme während der Kompilierung gibt, die Fehlermeldungen, die r.js herausplatzen soll, nicht in der Konsolenausgabe von Maven angezeigt werden. Was ich zur Fehlerbehebung mache, ist, dass ich den Maven-Befehl mit dem Flag -X erneut ausfühle, um die Debug-Ausgabe zu erhalten, so dass exec-maven-plugin den tatsächlich ausgeführten Befehl ausgibt. Es ist so etwas wie:

 
project-root/target/dependency/node/node \ 
    project-root/target/dependency/requirejs/r.js \ 
    -o src/main/webapp/app.build.json 

Wenn ich den Befehl manuell von der Befehlszeile ausführen, ich dann die eigentlichen Übersetzungsfehler in der Konsole und dann gehen sie zu fixieren.

Ich habe mit Umleitung stderr zu stdout mit 2>&1 vergeblich experimentiert (unter Windows), weil ich nicht sofort einen Weg finden konnte, exec-maven-plugin wie das Umleitungsbit als ein Argument zu machen. Ich habe diesen Weg nicht zu weit verfolgt, weil es nur eine wilde Vermutung ist, dass dies ein Problem von stderr/stdout ist - es könnte sein, aber ich spekuliere nur.

Irgendwelche Hinweise darauf, was passieren könnte, oder irgendwelche Vorschläge für weitere diagnostische Schritte, die ich ergreifen kann? Bitte denken Sie daran, dass es in diesem Problem mehrere bewegliche Teile gibt: Maven, exec-maven-plugin, Node.js, r.js und einen müden Kopf.

P.S. Ich überlege mir, requirejs-maven-plugin als letzten Ausweg eine Chance zu geben, weil die Projekt-Timeline es mir nicht erlaubt, das POM jetzt komplett zu überholen. Ich versuche zu sehen, ob ich irgendetwas mit dem aktuellen Setup machen kann.

+0

Haben Sie versucht, den Parameter 'outputFile' zu ​​verwenden? – aib

+0

@aib Ja. Leider tut es nichts aufgrund eines bekannten Bugs mit exec-maven-plugin: http://jira.codehaus.org/browse/MEXEC-86 –

+1

In Ihrer letzten Tasche, beachten Sie bitte [jszip maven plugin] (http : //jszip.org) es ist ein weiteres Rhino-basiertes, obwohl –

Antwort

1

Wie wickeln Sie den Anruf zu node.js und r.js in einem Skript, das Sie dann von der maven-exec-Plugin aufrufen?

Aus einem Blick auf r.js scheint es console.log für seine Ausgabe zu verwenden. Wenn Sie es aus einem Shell-Skript heraus ausführen, können Sie die Ausgabe abfangen, in eine Datei pipettieren, nach Fehlern suchen usw.

Je nach Betriebssystem ist dies möglicherweise einfach.

+0

Ja, das könnte möglicherweise funktionieren. Aufgrund der Tatsache, wie unsere Build-Umgebung in temporär zugeordneten Laufwerken funktioniert, ist es für mich schwierig, die resultierende Datei zu erhalten, es sei denn. Ich würde lieber einen Weg finden, die Fehler in der Konsole erscheinen zu lassen. Vielleicht, Ihr Vorschlag + a 2> & 1, stderr zu stdout neu zu mappen. –

+0

Ich meinte, dass Sie die Ausgabe in eine Datei innerhalb des Skripts pipen sollten (mit 2> & 1), dann könnten Sie eine 'cat file' aus dem Skript heraus oder etwas wie' grep' verwenden, um nach Fehlern zu suchen. Sie sollten nicht physisch auf die Dateien zugreifen müssen, stimme ich zu. – nwinkler