-1

Maven リポジトリにあるライブラリ (Jettison など) に依存する (Java) Maven プロジェクトをセットアップしています。一方、Jettison はスタックスに依存しています。stax でツール (Jar Jar Links) を実行する必要があります (名前空間を変更するため)。Maven プロジェクトで推移的な依存関係のルールを変更するにはどうすればよいですか? copy-dependencies ゴールを使用して、推移的な依存関係がターゲット フォルダーに含まれています (これが通常の方法だと思います)。これは、推移的に生成されたアーティファクトでプラグインが実行されるポイントであると想定しています。

追加の質問: 現時点ではこれは必要ありませんが、推移的な依存関係でソースを変更するにはどうすればよいですか? ソースのjarを取得できますmvn dependency:sourcesが、そこから、正しいアプローチが何であるかわかりません。

4

1 に答える 1

-1

勝利!

Maven について私よりも無知な人が少なくとも 2 人いるようです。そのため、この投稿の最後で修正を報告する前に、私が何をしているのかを説明させてください (ネタバレ注意: JarJar のバグのようです)。

Android は Java を使用していますが、多くの Java コア (具体的には javax クラス) が欠けています。Android DEX コンパイラ (.jar を Android .dex ファイルに変換する) では、java.* または javax.* 名前空間内のものをコンパイルすることさえできません。ただし、場合によっては (多くの場合)、組み込みたいルーチンがあります。特に、既存のライブラリで使用されているためです。最も伝説的なのは StAX です。そのため、Google はそれをDalvik リポジトリの wiki に含める方法の例を投稿しました。この例では、ant で JarJar... を使用しています。リポジトリを使用していない場合、推移的な依存関係は実際には問題にならないため、wiki では対処されていません。

Maven を使用してソースで JarJar を実行することができましたが、依存関係 (および推移的な依存関係) の名前空間を変更せずに、それは価値がありません。したがって、私の質問です。

copy-dependencies プラグインは、依存関係をコピーし、その過程で変換プラグインを実行するために役立つ可能性があると考えました。依存関係のコピーは、公式の「Maven in 5 minutes」ドキュメントのステップとして言及されているので、良いスタートのように思えましたが、公式ドキュメントを書いた人はそれを使用する方法を知らないかもしれません:-) . いずれにせよ、それは役に立ちませんでした-コピーするときにjarを変換する簡単な方法はありません。

Maven からの冗長な吐き出しを使用して、Jar Jar実際に私の jar を適切に処理し、結果を破棄していることを確認できました。アーティファクトの推移的な依存関係から変換されたクラスを残りのコードと一緒にパッケージ化していましたが、代わりにそれらを「除外」しました。Jar Jar パラメーターは基本的に文書化されておらず、ほとんどのタグはドキュメントにも記載されていませんが、私が見つけたすべての例では、保持するクラスを示すワイルドカードを含むセクションを使用しています。少なくとも私は、それがこのセクションの目的だと思いました (だと思いますか?)。代わりに、ランダムに物を捨てるようです。基本的に、セクションはバストされています。たとえば、私は持っていました:

            <keep>
              <pattern>com.example.**</pattern>
            </keep>

...これにより、com.example で始まるクラスが保持されると考えています。違う。それは地獄が望むものは何でも保持します。1つが機能するまで、その場所で何百万ものことを試しました:

            <keep>
              <pattern>*.**</pattern>
            </keep>

これにより、必要なクラスのみが保持されます-更新されたクラスと、変更されなかったクラスのオリジナル。**動作しないことに注意してください。これは、JarJar プラグインのバージョン 1.8 です (ほとんどの pom が使用しているバージョンです)。

仕事に戻る。

于 2013-10-03T07:18:09.440 に答える