2009-09-23 4 views
5

コマンドラインからjarjarを使用して、Scalaランタイムライブラリと単純なScalaプログラムを結合するのに問題があります。しかし、彼らは動作しない組み合わせコマンドラインからjarjarを使用するには?

$ java -jar ~/Desktop/saug/jarjar-1.0.jar find jar BCT.jar scala-library.jar 
/home/schani/Work/scala/bct/BCT.jar -> /home/schani/Work/scala/bct/scala-library.jar 

jarjarは正しく依存関係を検出し、私はまだ取得

$ CLASSPATH=./scala-library.jar java -jar ~/Desktop/saug/jarjar-1.0.jar process rules.jjl BCT.jar BCTS.jar 

jarファイルは、Scalaの-library.jarに依存します。 CLASSPATH変数を追加するかどうかで違いはありません。私のrules.jjlファイルは次のようになります:

keep BCT 

どうすればいいですか?

+1

これはちょうどジェダイの心のテクニックです。うまくいけば、あまりにもあなたを思い起こさせることはありません..... –

答えて

1

java "-jar"オプションを使用すると、クラスパスは無視されます。クラスパスを明示的にメインクラスを指定してみてください、そして「-jar」を省略:scala.runtime.Nothingの$クラスのキープを追加

java -cp ~/Desktop/saug/jarjar-1.0.jar:./scala-library.jar com.tonicsystems.jarjar.Main process rules.jjl BCT.jar BCTS.jar 
+0

どちらもうまくいきません。 –

+0

私の場合、より具体的には、BCT.jarを含むjarを作成します。私はすべてのパッケージの名前を変更するのではなく、すべての依存関係を収集したい。したがって、私のルールではBCT.jarにあるメインクラスのパッケージでルールを維持しています – pihentagy

0

してみてください。 Scalaで同様の製品(autojar; http://autojar.sourceforge.net/en_d/index.html)を使用する場合には、これが必要であることがわかりました。

+0

これはうまくいきません。 jarjarは、コマンドラインで指定された入力jarファイルからのみクラスを取得するように見えますが、依存するjarからは取得できません。指定する方法がないようです。 –

0

jarjarはあなたの瓶に他の瓶を再パッケージ化しません。 1つのjar自体の内部の依存関係の名前を変更するだけです。

Clean way to combine multiple jars? Preferably using Antの方法を使用して、依存するすべてのjarファイルをjarファイルにrejarし、jarjarを実行して将来の依存関係を回避します。

+0

実際には、antタスクを使用してただリジップするのが最も理想的な解決策ではありません。私はこれを行うには、Eclipseの脂肪ジャープラグインを使用しました。基本的に空のプロジェクトを作成し、すべてのjarをプロジェクトのビルドパスに入れ、fat-jarプラグインhttp://fjep.sourceforge.net/を使用してfat jarにエクスポートします。 – yincrash

関連する問題