0

Java コンパイラの理解に問題があります。

Minecraft を知っている場合は、ゲームに多くの mod があることを知っているかもしれません。これらは、古い (元の) .class を置き換える元の .jar に挿入される変更されたクラスの一部です。問題は、2 つの異なるものを使用する場合同じ .class を置き換える mod の場合、両方のコードをブレンドして何らかの編集を行わない限り、これはちょっと不可能です。

さて、同じ .class を使用する 2 つの mod を取得し、両方のクラスを逆コンパイルし (逆コンパイルは成功しました)、分析し、変更して、両方の mod で同時に機能する .java ファイルを作成しました。私の問題は、この .java を .class ファイルに再コンパイルして、minecraft .jar に挿入できるようにする必要があることですが、コンパイルしようとするたびに、class, interface, or enum expectedこれらselection does not contain main typeのエラーが予期されていたなどの多くのエラーが発生します。 、コードは多くの外部クラスに言及しており、実際にはメインの型を含んでいないためです。

前に述べたことが原因で発生したすべてのエラーを無視して、.java を .class バイナリ ファイルに変換する方法を知っている人がいるかどうか、またはどうすればよいかについて他に提案があるかどうかを知りたいです。それ。

PS: このコードは完全なプログラムではありません。そのため、これらのエラーが発生しました。.jar 内では完全に機能します。このファイルを単独でコンパイルするのは無意味だと答えないでください。

4

1 に答える 1

1

とにかく、すべてのエラーを無視して.javaを.classバイナリファイルに変換する方法を知っている人がいるかどうかを知りたいです...

それは不可能。エラーが含まれている場合、Javaソースコードを「強制的に」コンパイルすることはできません。問題はそれであるように思われます。

  • Javaデコンパイラが有効なJavaソースコードではない出力を生成することは珍しいことではありません。

  • 「分析、変更、作成」を間違えると、ソースコードが無効になる可能性があります...特に、Javaプログラミングの経験がない場合はなおさらです。


実際のソースコードスニペットと実際のコンパイルエラーを投稿すると、私たちがお手伝いできる場合があります。


ファローアップ

私はJavaプログラミングの経験がありますが、Eclipseを使用してコンパイルするだけなので、コマンドラインでjavacを使用することはありません。

それは問題ではありません。このコードをEclipseでコンパイルしようとすると、同じ問題が発生します。

エラーでクラスを再コンパイルできない場合、逆コンパイルをアンパックするプログラムを使用して.jar内のクラスを編集し、コードを表示して、すべてを再度編集してパックできるようにすることはできますか?

理論的には、はい。実際には、バイトコードと、これを実現するためにコンパイルされたコードがどのように機能するかをよく理解する必要があります。特に、間違えると、クラスのロード時に不思議な例外が発生する可能性があります。

入力クラスが難読化されているという事実は、逆コンパイラーがコンパイル可能なコードを生成するのが難しい理由を部分的に説明しています。

于 2012-07-15T04:46:15.707 に答える