2013-02-12 4 views
5

Node.jsでRequireJSのオプティマイザ(r.js)を実行するのにexec-maven-pluginを使用しています(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> 

コンパイル時に問題が発生した場合、r.jsが出力するエラーメッセージは、Mavenのコンソール出力には表示されません。問題を解決するには、Mavenコマンドを-Xフラグで再実行してデバッグ出力を取得し、exec-maven-pluginが実際のコマンドを実行するようにします。私は、コマンドラインから手動でコマンドを実行すると、私は、コンソール内の実際のコンパイルエラーを取得し、それらを固定に進ん

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

:それはのようなものです。

私は、リダイレクトビットを引数としてexec-maven-pluginを作る方法をすぐに見つけることができなかったので、stderrを標準出力に2>&1でリダイレクトしてみました(Windowsでは)。私はこのルートがあまりにも遠すぎるとは思っていませんでした。なぜなら、これはstderr/stdoutの問題であるという野生の推測だからです。それは可能かもしれませんが、私は単に推測しています。

私は何が起こっているのか、それ以上の診断ステップの提案はありますか?この問題には、Maven、exec-maven-plugin、Node.js、r.js、および1つの疲れた頭が複数存在することに注意してください。

P.S.私はrequirejs-maven-pluginに最後の手段としてショットを与えることを検討しています。なぜなら、プロジェクトのタイムラインは私に今POMの完全なオーバーホールを許可しないからです。現在の設定で何かできることがあるかどうかを確認しようとしています。

+0

'outputFile'パラメータを試しましたか? – aib

+0

@aibはい。残念ながら、exec-maven-pluginの既知のバグのため何もしません:http://jira.codehaus.org/browse/MEXEC-86 –

+1

最後のリゾートバッグで、[jszip maven plugin](http ://jszip.org)これは別のRhinoベースのものですが、 –

答えて

1

node.jsr.jsへの呼び出しをスクリプトにラップして、maven-execプラグインから呼び出す方法はありますか?

r.jsをご覧ください。出力にはconsole.logが使われているようです。たぶんシェルスクリプトから実行すると、出力をキャッチしてファイルにパイプしたり、エラーの正規表現などを入力することができます。

OSによっては、これは簡単なことかもしれません。

+0

はい、これは潜在的に機能する可能性があります。しかし、私たちのビルド環境が一時的にマップされたドライブの中でどのように動作するのかによって、結果ファイルを保持するのは難しいです。私はむしろエラーをコンソールに表示する方法を見つけるだろう。おそらく、あなたの提案+ a 2>&1 stderrをstdoutにリマップします。 –

+0

私は、出力を(2>&1を使って)スクリプト内のファイルにパイプし、スクリプト内から 'catファイル'を実行するか、 'grep'のようなものを使ってエラーを探すことができるということを意味しました。あなたは物理的にファイルにアクセスする必要はありません、私は同意します。 – nwinkler

関連する問題