さて、Javaプロジェクトがあり、プロジェクトエクスプローラーのMaven依存関係プロジェクトフォルダーの下にjar
フォルダーがあり、その中にファイルがあり.class
ます。これで、をクリックしてファイルをJavaファイルとしてDownload Sources
表示できますが、Eclipseで編集できません。.class
私は何をすべきか?
.class
ファイルを編集することはできません。java
ソースコードに含まれているファイルのみを編集して再コンパイルできます。
によってダウンロードされるソースは、コードの調査を支援するために、特定のプロジェクトに対して特定の時間にmaven
によって生成されたプロジェクトSNAPSHOTmaven source plugin
ですが、コードを変更することはできません。
これらのソースはクラスパスにバインドして、IDEでプロジェクトソースをナビゲートするために使用できますが、それでも読み取り専用のままです。
jarおよびソースjarを直接編集することはできません。ソースコードをダウンロードして編集する必要があります。次に、ビルドプロセスを実行してjarを再ビルドし、mavenリポジトリに新しいバージョンとしてインストールする必要があります。
クラスファイルは、実行可能プログラムの一部となるように準備されたコンパイル済みバイナリです。
それらを変更することは、コンパイルされたソースコードを変更する技術です。あなたはおそらくそれをしたくないでしょう。置換を生成する場合は、プロジェクト全体をダウンロードして再コンパイルします。
あなたはそのような行動の下で他の特定のことをする義務があるかもしれません、法律によってあなたはソフトウェアのライセンスを遵守しなければなりません、そして再コンパイルと再配布(あなたが再コンパイルしなければならない場合あなたがすることです)はしばしばはるかに重い負担をかけます開発者は単に「使用」するだけではありません(ライセンスによって異なります)。
前述のように、.classファイルを変更することはできません。依存関係のソースJavaファイルは、次の方法で入手できる場合はダウンロードできます。
mvn dependency:sources
mvn dependency:resolve -Dclassifier=javadoc
(混乱している読者の場合:Eclipseは、Maven構成を介して、既知の/利用可能な(おそらく独自の)プロジェクトソースファイルにジャンプして、以前にパッケージ化されたjar(*.class
ファイルを含む)を介してコードに実際にリンクされているときに編集する方法を知っています)
(私たちは同じ問題を抱えていましたが、それはいくつかの調整の後に以前は機能していました、そして私たちはこれを理解するためにかなりの時間を費やします...)
私たちの(典型的なEARアーキタイプ)dir構造:
[projx]
|- [ejb]
|- pom.xml
...
<!-- A) PROBLEM: dependency resolution can't work in [web]/src/**/* -->
<version>1.0-SNAPSHOT</version>
<!-- B) OK: this is what we (and probably you) wanted -->
<!-- <version>2.0.1-SNAPSHOT</version> -->
...
|- [web]
|- pom.xml
...
<version>2.0.1-SNAPSHOT</version>
...
<dependency>
<groupId>...</groupId>
<artifactId>projx-ejb</artifactId>
<type>ejb</type>
<!-- C) a specific older version here would help it as well
if you need it -->
<!-- <version>1.0.3.Final</version> -->
<scope>provided</scope>
</dependency>
...
|- [ear]
|- pom.xml
...
<version>2.0.1-SNAPSHOT</version>
...
|- pom.xml
<project ...>
...
<version>2.0.1-SNAPSHOT</version>
...
<modules>
<module>ejb</module>
<module>web</module>
<module>ear</module>
</modules>
...
したがって、問題は、 (A))を増やすのを忘れたこと[ejb]/pom.xml//project/version
です。
B) (実際にはグローバルプロパティを参照)と同様に調整した後、それは再び魅力のように機能しました。[projx]/pom.xml//project/properties/projx.version
(たとえば、 `projx-ejb-1.0.3.Final.jar、JARバージョンなど、古いバージョンに明示的に依存していた場合は、Cを選択できたはずです)もちろん、ワークスペースの解決が再び機能しないアプローチは当然です。 。)