非常に特殊な状況に直面しており、アドバイスが必要です。同じ会社の別のプロジェクトに依存するプロジェクトに取り組んでおり、依存関係にいくつかの変更を適用する必要があります。私が抱えている問題は、依存関係からのソースコードが失われたことです。そのため、リポジトリ内の Maven 依存関係と対応する jar ファイルだけが残っています。その上、JiBX パーサーを使用して作成された Jar ファイル内のいくつかのクラスは、私が持っていないいくつかの XSD ファイルをマッピングし、結果のクラスは合成であり、それらを適切に処理できる逆コンパイラが見つかりませんでした。
そのすべての唯一の良い点は、変更する必要があるクラスを適切に逆コンパイルできることです。そのため、次のようにしました。
- jar ファイル全体を逆コンパイルしたところ、いくつかのクラス (JiBx のクラス) が空であるか、メソッドが正しく実装されていませんでした。
- 間違ったメソッドの本体をコメントアウトしてスタブ オブジェクトを作成し、必要な変更を正しいクラスに適用して再コンパイルしました。
- 古い Jar ファイルを取得して開き、手動で古いクラスを新しいクラスに置き換えました。
結果のJarは期待どおりに機能しました。
ここで私の質問は、Maven を使用してそのすべてを実行できますか?
アイデアは、JiBX クラス ファイルをリソースとして配置し、同等のスタブをソース ファイルとして保持してから、maven に次のようにさせることです。
- 通常どおりすべてをコンパイルし、コンパイルされたすべてのクラス ファイルをターゲット フォルダーに配置します。
- ターゲット フォルダーからスタブ クラス ファイルを削除し、それらを古いプリコンパイル済みクラス ファイルに置き換えます。
- ジャーをパッケージ化します。
どのアプローチをお勧めしますか?
アップデート
依存プロジェクトの構造について、さらに詳しく説明します。
すべてのクラスは同じパッケージ内にあります。
my.project.domain.JiBX__c_GeneratedObfuscatedClass1.java
my.project.domain.JiBX__c_GeneratedObfuscatedClass2.java
my.project.domain.JiBX__c_GeneratedObfuscatedClass3.java
my.project.domain.CustomizableClass1.java
my.project.domain.CustomizableClass2.java
my.project.domain.CustomizableClass3.java
JiBX クラスは依存関係として適切にインポートされず、CustmizableClasses のいずれかをプロジェクト ソースに配置して、JiBX クラスを依存関係に含めようとすると、コンパイラは不足しているメソッドを報告します。
提案どおりに Shade プラグインも使用してみましたが、JiBX クラスをソース パスに含める必要があるため、jar 依存関係とコンパイルされた CustomizableClasses からパッケージ JiBX クラスに含める必要がありますが、jar dep から CustomizableClasses をスキップしてコンパイルしますJiBX クラス。
私はそれがうまくいくように見えますが、私はまだそれを行う方法を見つけられなかったことを認めます. 手がかりは大歓迎です。
更新 2 (解決策)
他の誰かが同じことをする必要がある場合に備えて、提案されているようにシェードプラグインを使用して最終的にこれをどのように管理したかをここで説明します:
最後に、同じパッケージ内に逆コンパイルされたクラスを含むプロジェクトを作成し、逆コンパイルしたくないメソッドをコメントアウトしたままにしました。
pom.xml に以下を追加しました。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<includes>
<include>${project.groupId}:${project.artifactId}</include>
<include>TheDamnedProject:WithoutSources</include>
</includes>
</artifactSet>
<filters>
<filter>
<artifact>TheDamnedProject:WithoutSources</artifact>
<includes>
<!-- These classes will be taken directly from dependency JAR -->
<include>my/package/ClassWhichCouldNotBeDecompiled1.class</include>
<include>my/package/ClassWhichCouldNotBeDecompiled2.class</include>
<include>my/package/ClassWhichCouldNotBeDecompiled3.class</include>
<include>my/package/ClassWhichCouldNotBeDecompiled4.class</include>
</includes>
</filter>
<filter>
<artifact>${project.groupId}:${project.artifactId}</artifact>
<excludes>
<!-- These classes will be overridden by the ones inside the JAR -->
<exclude>my/package/ClassWhichCouldNotBeDecompiled1.class</exclude>
<exclude>my/package/ClassWhichCouldNotBeDecompiled2.class</exclude>
<exclude>my/package/ClassWhichCouldNotBeDecompiled3.class</exclude>
<exclude>my/package/ClassWhichCouldNotBeDecompiled4.class</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
ありがとう!
カルレス