2013-02-12 4 views
5

Używamy exec-maven-plugin do uruchomienia optymalizatora RequireJS (r.js) pod Node.js (ponieważ jest dużo szybszy niż Rhino):Wiadomości o błędach zjedzone gdzieś wzdłuż exec-maven-plugin> Node.js> r.js

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.2</version> 
    <executions> 
     <execution> 
      <id>compile-js</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>exec</goal> 
      </goals> 
      <configuration> 
       <executable>${node.executable}</executable> 
       <arguments> 
        <argument>${project.build.directory}/dependency/requirejs/r.js</argument> 
        <argument>-o</argument> 
       </arguments> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

problem jest, gdy jest jakiś problem podczas kompilacji, komunikaty o błędach, które r.js ma wygadać nie są pokazane na wyjściu konsoli Maven jest. To, co robię, aby rozwiązać problem, polega na ponownym uruchomieniu polecenia Maven za pomocą opcji -X, aby pobrać dane wyjściowe debugowania, aby exec-maven-plugin wyprowadzał faktyczne wykonywane polecenie. To coś takiego:

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

Kiedy ręcznie uruchomić polecenie z wiersza polecenia, ja wtedy uzyskać rzeczywiste błędy kompilacji w konsoli, a następnie przystąpić do ich mocowania.

Eksperymentowałem z przekierowaniem stderr na stdout z 2>&1 bezskutecznie (na Windowsie), ponieważ nie mogłem od razu znaleźć sposobu na stworzenie exec-maven-plugin jak bit przekierowania jako argumentu. Nie podążałem tą drogą zbyt daleko, ponieważ to tylko dzikie przypuszczenie, że jest to problem stderr/stdout - może być, ale ja tylko spekuluję.

Jakieś wskazówki dotyczące tego, co może się wydarzyć, lub sugestie dotyczące dalszych kroków diagnostycznych, które mogę podjąć? Pamiętaj, że w tym problemie jest wiele ruchomych części: Maven, exec-maven-plugin, Node.js, r.js i jedna zmęczona głowa.

P.S. Zastanawiam się nad zrobieniem zdjęcia w ostateczności, ponieważ oś czasu projektu nie pozwala mi teraz na całkowity przegląd POM. Próbuję sprawdzić, czy jest coś, co mogę zrobić z obecną konfiguracją.

+0

Czy próbowałeś użyć parametru 'outputFile'? – aib

+0

@aib Tak. Niestety nie robi nic z powodu znanego błędu z exec-maven-plugin: http://jra.codehaus.org/browse/MEXEC-86 –

+1

W twojej ostatniej ucieczce rozważ proszę [jszip maven plugin] (http : //jszip.org) jest to inna bazująca na Rhino –

Odpowiedz

1

Jak o owijania wywołanie node.js i r.js w skrypcie, które następnie połączyć z wtyczką maven-exec?

Wygląda na to, że na r.js jest używany console.log. Może uruchomienie go ze skryptu powłoki pozwoli ci wychwycić dane wyjściowe, potokować je w pliku, wyreperować na błędy itp.

W zależności od systemu operacyjnego może to być łatwe.

+0

Tak, to może potencjalnie zadziałać. Jednak ze względu na to, jak nasze środowisko kompilacji działa w tymczasowych zmapowanych dyskach, trudno jest uzyskać uchwyt wynikowego pliku, chyba że. Wolałbym znaleźć sposób na pojawienie się błędów w konsoli. Być może twoja sugestia + 2> i 1 zmieniają stderr na stdout. –

+0

Miałem na myśli, że powinieneś wyprowadzić wyjście do pliku wewnątrz skryptu (używając 2> i 1), wtedy możesz zrobić "plik cat" z wnętrza skryptu lub użyć czegoś podobnego do 'grep' w celu wyszukania błędów. Nie powinienem mieć fizycznego dostępu do plików, zgadzam się. – nwinkler

Powiązane problemy