IKVM merupakan implementasi Java untuk platform Microsoft .NET. Ini dapat digunakan dengan cepat dan mudah:
Tugas-tugas ini dapat dilakukan tanpa mem-porting kode sumber ke .NET.
<MavenReference>
, <IkvmReference>
atau ikvmc
.main()
untuk dieksekusi saat runtime saat membangun menggunakan ikvmc
.java
yang dapat dieksekusi di dalam JDK Runtime Image. Bytecode Java dikonversi dengan cepat ke CIL dan dieksekusi. Pengalamannya harus identik dengan JDK biasa. Terdapat berbagai perbedaan antara dukungan untuk semua artefak kami yang berbeda. Misalnya, ada beberapa platform yang tidak dapat kami gunakan untuk mendistribusikan gambar dan beberapa platform yang tidak dapat kami distribusikan alatnya.
PM> Install-Package IKVM
Atau, untuk menggunakan MavenReference
:
PM> Install-Package IKVM.Maven.Sdk
Alat-alat tersebut tersedia untuk diunduh di halaman Rilis.
Gambar runtime JRE dan JDK tersedia. Gambar-gambar ini adalah struktur direktori JRE atau JDK standar yang berisi semua alat standar: javac, jdeps, policytool, keytool, dll. Beberapa perpustakaan Java mungkin memerlukan JRE atau JDK, dan jika demikian, IKVM.Image.JRE
atau IKVM.Image.JDK
Paket IKVM.Image.JDK
harus ditambahkan ke proyek Anda.
PM> Install-Package IKVM.Image.JRE
PM> Install-Package IKVM.Image.JDK
JDK mandiri yang dapat didistribusikan tersedia untuk diunduh di halaman Rilis. Struktur direktori ini seharusnya cukup sebagai jalur JAVA_HOME
untuk aplikasi Java standar.
IKVM mendukung integrasi dengan proyek bergaya .NET SDK serta alat tingkat rendah untuk menjalankan kode Java yang dikompilasi secara langsung atau untuk skenario pembangunan tingkat lanjut. 2 titik masuk utama untuk integrasi dengan proyek bergaya .NET SDK adalah IkvmReference
dan MavenReference
. Proyek bergaya .NET SDK dapat dibangun di baris perintah secara langsung atau menggunakan IDE yang mendukungnya, seperti versi terbaru Visual Studio atau JetBrains Rider.
IKVM menyertakan dukungan waktu pembangunan untuk menerjemahkan perpustakaan Java ke rakitan .NET. Instal paket IKVM
dalam proyek yang memerlukan referensi ke perpustakaan Java. Gunakan IkvmReference
dalam ItemGroup
untuk menunjukkan perpustakaan Java mana yang dibutuhkan proyek Anda.
< ItemGroup >
< PackageReference Include = " IKVM " Version = " Version " />
</ ItemGroup >
< ItemGroup >
< IkvmReference Include = " ....exthelloworldhelloworld-2.0.jar " />
</ ItemGroup >
Rakitan keluaran akan dihasilkan sebagai bagian dari proses pembangunan proyek Anda dan referensi akan secara otomatis ditambahkan ke proyek Anda sehingga Anda dapat memanggil API dari rakitan .jar
yang telah dikompilasi. Metadata tambahan dapat ditambahkan ke IkvmReference
untuk menyesuaikan rakitan yang dihasilkan.
< ItemGroup >
< IkvmReference Include = " ....exthelloworldhelloworld-2.0.jar " >
< AssemblyName >MyAssembly</ AssemblyName >
< AssemblyVersion >3.2.1.0</ AssemblyVersion >
< AssemblyFileVersion >3.0.0.0</ AssemblyFileVersion >
< DisableAutoAssemblyName >true</ DisableAutoAssemblyName >
< DisableAutoAssemblyVersion >true</ DisableAutoAssemblyVersion >
< FallbackAssemblyName >MyAssemblyFallback</ FallbackAssemblyName >
< FallbackAssemblyVersion >3.1.0.0</ FallbackAssemblyVersion >
< KeyFile >MyKey.snk</ KeyFile >
< DelaySign >true</ DelaySign >
< Compile >SomeInternalDependency.jar;SomeOtherInternalDependency.jar</ Compile >
< Sources >MyClass.java;YourClass.java</ Sources >
< References >SomeExternalDependency.jar;SomeOtherExternalDependency.jar</ References >
< Aliases >MyAssemblyAlias;helloworld2_0</ Aliases >
< Debug >portable</ Debug >
</ IkvmReference >
</ ItemGroup >
Nilai berikut dapat digunakan sebagai atribut atau elemen bertumpuk <IkvmReference>
.
Atribut atau Elemen | Keterangan |
---|---|
Include (hanya atribut) | Identitas item IkvmReference . Nilainya dapat berupa salah satu dari:
|
AssemblyName | Secara default, AssemblyName dihasilkan menggunakan aturan yang ditentukan oleh spesifikasi Automatic-Module-Name . Untuk mengatasinya, lakukan di sini. Nilainya tidak boleh menyertakan ekstensi file, .dll akan ditambahkan secara otomatis. |
AssemblyVersion | Secara default, AssemblyVersion dibuat menggunakan aturan yang ditentukan oleh spesifikasi Automatic-Module-Name . Untuk mengatasinya, lakukan di sini. |
AssemblyFileVersion | Secara default, AssemblyFileVersion dihasilkan menggunakan aturan yang ditentukan oleh spesifikasi Automatic-Module-Name atau, jika diganti, nilai yang sama dengan AssemblyVersion . Untuk mengatasinya, lakukan di sini. |
DisableAutoAssemblyName | Jika true menonaktifkan deteksi AssemblyName . |
DisableAutoAssemblyVersion | Jika true menonaktifkan deteksi AssemblyVersion . |
FallbackAssemblyName | Jika AssemblyName tidak diberikan atau tidak dapat dihitung, gunakan nilai ini. |
FallbackAssemblyVersion | Jika AssemblyVersion tidak disediakan atau tidak dapat dihitung, gunakan nilai ini. |
KeyFile | Menentukan nama file yang berisi kunci kriptografi. Ketika opsi ini digunakan, kompiler memasukkan kunci publik dari file yang ditentukan ke dalam manifes rakitan dan kemudian menandatangani rakitan akhir dengan kunci pribadi. |
DelaySign | Opsi ini menyebabkan kompiler mencadangkan ruang di file keluaran sehingga tanda tangan digital dapat ditambahkan nanti. Gunakan DelaySign jika Anda hanya ingin menempatkan kunci publik di rakitan. Opsi DelaySign tidak berpengaruh kecuali digunakan dengan KeyFile . |
Compile | Daftar item jalur kelas Java yang dipisahkan titik koma untuk dikompilasi ke dalam rakitan. Secara default nilai ini adalah Identity item, jika identitas item adalah file atau direktori JAR yang ada (belum didukung). Gumpalan MSBuild didukung untuk mereferensikan beberapa file JAR atau .class. |
Sources | Daftar file sumber Java yang dipisahkan titik koma untuk digunakan selama pembuatan dokumentasi. (belum didukung) |
References | Daftar nilai identitas IkvmReference lainnya yang dipisahkan titik koma opsional untuk ditentukan sebagai referensi ke nilai identitas saat ini. Misalnya, jika foo.jar bergantung pada bar.jar , sertakan keduanya sebagai item IkvmReference , namun tetapkan identitas bar.jar pada metadata References foo.jar . |
Debug | Nilai opsional yang menunjukkan cara menghasilkan simbol debug. Secara default, ini ditentukan berdasarkan properti <DebugType> proyek. Hanya simbol debug lengkap yang saat ini didukung. |
Aliases | Daftar alias yang dipisahkan titik koma yang dapat digunakan untuk mereferensikan rakitan di References . |
ClassLoader | Nama kelas yang sepenuhnya memenuhi syarat dari implementasi ClassLoader khusus untuk digunakan sebagai induk delegasi. Contohnya termasuk ikvm.runtime.AppDomainAssemblyClassLoader dan ikvm.runtime.ClassPathAssemblyClassLoader . |
Semua metadata lain yang didukung pada definisi grup item Reference MSBuild. |
IkvmReference
tidak transitif. Menyertakannya dalam satu proyek dan menambahkan ketergantungan ke proyek tersebut dari proyek kedua tidak akan menghasilkan referensi yang sama tersedia pada proyek kedua. Sebagai gantinya, tambahkan referensi ke setiap proyek.
Untuk setiap proyek untuk menyelesaikan perakitan yang dihasilkan sama, pastikan pengaturannya identik.
Beberapa entri IkvmReference
dapat dikonfigurasi untuk menyertakan satu sama lain sebagai referensi.
< ItemGroup >
< IkvmReference Include = " helloworld.jar " >
< AssemblyVersion >1.0.0.0</ AssemblyVersion >
</ IkvmReference >
< IkvmReference Include = " helloworld-2.jar " >
< AssemblyName >helloworld-2</ AssemblyName >
< AssemblyVersion >2.0.0.0</ AssemblyVersion >
< References >helloworld.jar</ References >
< Aliases >helloworld2</ Aliases >
</ IkvmReference >
</ ItemGroup >
Automatic-Module-Name
Automatic-Module-Name
adalah atribut tertentu dari manifes JAR, yang dapat ditemukan di file META-INF/MANIFEST.MF
di dalam JAR, atau nilai yang dihasilkan berdasarkan nama file JAR. Lihat dokumentasi untuk informasi lebih lanjut.
Lihat Readme ikvm-maven untuk petunjuk penggunaan.
Proyek IKVM merekomendasikan agar masyarakat tidak mendistribusikan ulang pustaka FOSS Java yang dikompilasi dengan IKVM melalui sistem publik seperti NuGet.org, kecuali Anda adalah pemilik asli perangkat lunak tersebut dan memiliki alasan yang kuat.
Membuat salinan perpustakaan FOSS Java dan menerbitkannya ke mekanisme distribusi seperti NuGet.org menciptakan kebingungan ekosistem dan konflik ketergantungan di bagian hilir. Kami menyediakan sistem sehingga pengguna .NET perpustakaan Java dapat mereferensikan perpustakaan tersebut langsung dari mekanisme ekosistem Java standar: Maven Central, dll melalui IKVM.Maven. Ingat, sangat sedikit perpustakaan yang ada dalam ruang hampa. Perpustakaan seringkali bergantung pada lusinan perpustakaan lainnya. Dua perpustakaan Java yang tidak terkait sering kali bergantung pada perpustakaan Java dasar yang sama. Metode penyelesaian konflik ketergantungan dan penyatuan versi yang kompleks harus dilibatkan dalam menyelesaikan hierarki ini untuk setiap proyek hilir. Anda mungkin akan memperkenalkan kelas duplikat ke pengguna versi Anda, atau menyebabkan pengguna Anda bergantung pada versi perpustakaan lain yang salah.
Selain hal di atas, saat ini kami tidak menjamin bahwa API antara rakitan yang dikompilasi secara statis dan perpustakaan IKVM.Java dan IKVM.Runtime tetap stabil. Rakitan yang dikompilasi secara statis yang dibangun pada satu versi IKVM tidak dijamin dapat dijalankan pada versi IKVM yang lebih tinggi, bahkan pada tingkat patch. Kami ingin mengumumkan dukungan yang lebih baik untuk hal ini di masa mendatang, namun saat ini ada banyak pekerjaan yang direncanakan untuk API IKVM.Runtime dan IKVM.Java yang tidak ingin kami hambat. Karena kami juga menyediakan alat build untuk mempermudah proses kompilasi ulang rakitan dari mesin build, jika rekomendasi diikuti, dampaknya akan terbatas.
Ada pengecualian terhadap saran ini, seperti perpustakaan tidak dipublikasikan ke Maven. Dalam hal ini, panduannya adalah menganjurkan agar perpustakaan Java asli dipublikasikan ke Maven, atau mengerjakannya sendiri, karena itu adalah tempat yang tepat untuk perpustakaan Java.
Kami tidak dapat memaksa Anda untuk mengikuti saran ini. Namun demi kesehatan ekosistem, kami mendorong Anda untuk mempertimbangkannya sendiri.