
こんにちはHabr。 以前の投稿では、
Unityまたは
Mono / Microsoft .NETのサポートについてのみ説明しました。 しかし、私が話さないことはもっとたくさんあります。 話したいことが1つあります。これは
IKVM.NETです。私の投稿を見逃した人のために:
ConsuloはIntelliJ IDEA Community Editionのフォークであり、.NETサポート(現時点ではC#であり、このセクターに多くの重点が置かれています)、JavaIKVM.NETで Javaプロジェクトを実行する必要がある状況を想像してください。
IKVM.NETから始めましょう
IKVM.NETは、MonoおよびMicrosoft .NET Framework用のJavaの実装です。 次のコンポーネントが含まれます。
.NETに実装されたJava仮想マシン
Javaクラスライブラリの.NET実装
Javaと.NETの相互運用性を可能にするツール
IKVM.NETの詳細については
こちらをご覧ください。
チュートリアルをお読み
ください 。退屈であり、開発者にとってあまり有用ではありません。
Consuloに必要なプラグインを
配置し 、
IKVM.NET +
Microsoft .NET (
Mono IKVM.NETは機能しません。問題は
Xamarinにあります )とその依存関係が必要です。 その結果、プラグインのリストは次のようになります。

。
始めましょう。 Javaプロジェクトを作成し、起動します
printlnとは何かを見てみましょう:
rt.jarにある
PrintStream.classに切り替えました-すべてが通常通りです
IKVM.NETに渡します
今、状況があります
-JVMサポートを失いたくありませんが、同時に
IKVM.NETでコードを実行できるようにしたいです。 プロジェクトをコピーしたり、
Java設定を失ったりすることは望みません。 私たちは何をしますか?
Visual Studioや
IntelliJ IDEAなどの他のIDEでは、上記のように行う必要がありますが、
Consuloではありません。
Consuloには
Module Layersと呼ばれる機能があり、
モジュール の設定の複数のレイヤーを作成し、同時にそれらをすばやく切り替えることができます。
標準-各モジュールには、
Defaultという名前の1つの
レイヤーがあります。
.NETプロジェクトは、2つの層の
デバッグと
リリースで作成され
ますモジュールの設定に入り、
現在のレイヤーのコピーを作成します:

たとえば
IKVMと呼びます:

これで2つの
レイヤーができました :
Javaをサポートする
Defaultレイヤーの完全なコピーがあり
ます (
Javaは
Extensionsに含まれています)
Javaサポートをオフにして、
IKVM.NETをオンにします。
IKVM .NETには組み込みのJavaコードコンパイラがなく、
javacが使用されるため、
Java SDKを指定する必要があります。
さあ、カスタマイズしてください。
NET拡張モジュール:
Allow Source Rootsを有効にし、
Main Typeを選択する必要があります
-IKVM.NETは、
Entry Pointクラスを選択する方法を知りません。 ご覧のとおり、
Javaクラスをすでに選択できます。
また、
mscorlib.dll依存関係を追加する必要があります。

すべてを正しく構成したら、既存の
実行構成を実行してみてください。

ただし、これは
java.exeの動作をエミュレートし、起動時に
JVMバイトコードを
CLIに変換し、スロースタートを保証します。
IKVM.NETは、
Javaコードを
* .exeファイルにコンパイルし、通常の
.NETアプリケーションとして起動します。 そのため、
IKVM.NETでは、別の実行構成を使用して、
.NETアプリを起動できます。

以下を開始します。

ご覧の
とおり 、
ikvm.exeではなく
untitled1.exeを既に実行しています。起動速度ははるかに高速です:)。
今
printlnに切り替えようとしています:
IKVM.OpenJDK.Core.dllにある
PrintStream.msilに切り替えたことが
わかります。 つまり、すでに
.NETバイコードを使用しており、たとえば
.NETクラスを使用できます(すべての
.NETクラスには、
Javaクラスと競合しないように初期名前空間
cliがあります)。

そして、メソッドを呼び出します:

それでは、
JVMの実装に戻りましょう。


ご覧のとおり、
JVMでは
.NETクラスが利用できないため、コードは赤です。
PS
この投稿-柔軟性のあるサポートがどれほど優れているかを示しており、ある種の技術スタックだけに焦点を合わせているわけではありません。
IKVM.NETプラグインは、私にとって優先順位の高いプラグインではないため、あまり知りません。
将来的には、
.NETプラットフォームでの
Javaコードの
デバッグをご覧ください。 問題があり、それはグローバルです-悲しいかな、それはまだ私のために解決されていません。
ありがとう