IKVM هو تطبيق Java لمنصة Microsoft .NET. ويمكن استخدامه بسرعة وسهولة:
يمكن تنفيذ هذه المهام دون نقل التعليمات البرمجية المصدر إلى .NET.
<MavenReference>
أو <IkvmReference>
أو ikvmc
.main()
ليتم تنفيذها في وقت التشغيل عند البناء باستخدام ikvmc
.java
القابل للتنفيذ داخل صورة JDK Runtime. يتم تحويل رمز Java الثانوي سريعًا إلى CIL وتنفيذه. يجب أن تكون التجربة مطابقة لـ JDK العادي. توجد اختلافات مختلفة بين الدعم لجميع أعمالنا الفنية المختلفة. على سبيل المثال، هناك بعض الأنظمة الأساسية التي لا يمكننا توزيع الصور عليها وبعض الأنظمة الأساسية التي لا يمكننا توزيع الأدوات عليها.
PM> Install-Package IKVM
أو لاستخدام MavenReference
:
PM> Install-Package IKVM.Maven.Sdk
الأدوات متاحة للتنزيل على صفحة الإصدارات.
تتوفر كل من صورة وقت التشغيل JRE وJDK. هذه الصور عبارة عن هياكل دليل JRE أو JDK قياسية تحتوي على جميع الأدوات القياسية: javac، وjdeps، وpolicytool، وkeytool، وما إلى ذلك. قد تتطلب بعض مكتبات Java إما JRE أو JDK، وإذا كان الأمر كذلك، IKVM.Image.JRE
أو IKVM.Image.JDK
يجب إضافة حزمة IKVM.Image.JDK
إلى مشروعك.
PM> Install-Package IKVM.Image.JRE
PM> Install-Package IKVM.Image.JDK
يتوفر JDK مستقل قابل للتوزيع للتنزيل على صفحة الإصدارات. يجب أن تكون بنية الدليل هذه كافية كمسار JAVA_HOME
لتطبيقات Java القياسية.
يدعم IKVM التكامل مع مشاريع نمط .NET SDK بالإضافة إلى الأدوات ذات المستوى المنخفض لتشغيل تعليمات Java البرمجية المترجمة مباشرة أو لسيناريوهات البناء المتقدمة. نقطتا الدخول الرئيسيتان للتكامل مع مشاريع نمط .NET SDK هما IkvmReference
و MavenReference
. يمكن إنشاء مشاريع بنمط .NET SDK على سطر الأوامر مباشرةً أو باستخدام IDE الذي يدعمها، مثل الإصدارات الحديثة من Visual Studio أو JetBrains Rider.
يشتمل IKVM على دعم وقت البناء لترجمة مكتبات Java إلى تجميعات .NET. قم بتثبيت حزمة IKVM
في مشروع يتطلب مراجع لمكتبات Java. استخدم IkvmReference
ضمن ItemGroup
للإشارة إلى مكتبات Java التي يتطلبها مشروعك.
< ItemGroup >
< PackageReference Include = " IKVM " Version = " Version " />
</ ItemGroup >
< ItemGroup >
< IkvmReference Include = " ....exthelloworldhelloworld-2.0.jar " />
</ ItemGroup >
سيتم إنشاء تجميع الإخراج كجزء من عملية إنشاء مشروعك وسيتم إضافة مرجع تلقائيًا إلى مشروعك حتى تتمكن من استدعاء واجهات برمجة التطبيقات الخاصة بتجميع .jar
المترجم. يمكن إضافة بيانات التعريف الإضافية إلى IkvmReference
لتخصيص التجميع الذي تم إنشاؤه.
< 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 >
يمكن استخدام القيم التالية إما كسمة أو عنصر متداخل لـ <IkvmReference>
.
السمة أو العنصر | وصف |
---|---|
Include (السمة فقط) | هوية عنصر IkvmReference . يمكن أن تكون القيمة واحدة من:
|
AssemblyName | افتراضيًا، يتم إنشاء اسم AssemblyName باستخدام القواعد المحددة بواسطة مواصفات Automatic-Module-Name . لتجاوز هذا، قم بذلك هنا. يجب ألا تتضمن القيمة امتداد الملف، وسيتم إلحاق .dll تلقائيًا. |
AssemblyVersion | افتراضيًا، يتم إنشاء AssemblyVersion باستخدام القواعد المحددة بواسطة مواصفات Automatic-Module-Name . لتجاوز هذا، قم بذلك هنا. |
AssemblyFileVersion | افتراضيًا، يتم إنشاء AssemblyFileVersion باستخدام القواعد المحددة بواسطة مواصفات Automatic-Module-Name ، أو، إذا تم تجاوزها، بنفس قيمة AssemblyVersion . لتجاوز هذا، قم بذلك هنا. |
DisableAutoAssemblyName | إذا كان true فسيتم تعطيل اكتشاف AssemblyName . |
DisableAutoAssemblyVersion | إذا كان true فسيتم تعطيل الكشف عن AssemblyVersion . |
FallbackAssemblyName | إذا لم يتم توفير AssemblyName أو لا يمكن حسابه، استخدم هذه القيمة. |
FallbackAssemblyVersion | إذا لم يتم توفير AssemblyVersion أو لا يمكن حسابه، استخدم هذه القيمة. |
KeyFile | يحدد اسم الملف الذي يحتوي على مفتاح التشفير. عند استخدام هذا الخيار، يقوم المترجم بإدراج المفتاح العام من الملف المحدد في بيان التجميع ثم يوقع التجميع النهائي باستخدام المفتاح الخاص. |
DelaySign | يؤدي هذا الخيار إلى قيام المترجم بحجز مساحة في ملف الإخراج بحيث يمكن إضافة التوقيع الرقمي لاحقًا. استخدم DelaySign إذا كنت تريد فقط وضع المفتاح العام في التجميع. ليس لخيار DelaySign أي تأثير إلا إذا تم استخدامه مع KeyFile . |
Compile | قائمة مفصولة بفاصلة منقوطة لعناصر مسار فئة Java المراد تجميعها في التجميع. افتراضيًا، هذه القيمة هي Identity العنصر، إذا كانت هوية العنصر عبارة عن ملف أو دليل JAR موجود (غير مدعوم بعد). يتم دعم MSBuild globs للإشارة إلى ملفات JAR أو .class متعددة. |
Sources | قائمة مفصولة بفاصلة منقوطة لملفات مصدر Java لاستخدامها أثناء إنشاء الوثائق. (غير معتمد بعد) |
References | قائمة اختيارية مفصولة بفاصلة منقوطة لقيم هوية IkvmReference الأخرى لتحديدها كمرجع للقيمة الحالية. على سبيل المثال، إذا كان foo.jar يعتمد على bar.jar ، فقم بتضمين كليهما كعناصر IkvmReference ، لكن حدد هوية bar.jar في البيانات الوصفية References الخاصة بـ foo.jar . |
Debug | قيمة اختيارية تشير إلى كيفية إنشاء رموز تصحيح الأخطاء. افتراضيًا، يتم تحديد ذلك استنادًا إلى خصائص <DebugType> الخاصة بالمشروع. رموز التصحيح الكاملة فقط هي المدعومة حاليًا. |
Aliases | قائمة مفصولة بفاصلة منقوطة للأسماء المستعارة التي يمكن استخدامها للإشارة إلى التجميع في References . |
ClassLoader | اسم فئة مؤهل بالكامل لتطبيق ClassLoader المخصص لاستخدامه كأصل تفويض. تتضمن الأمثلة ikvm.runtime.AppDomainAssemblyClassLoader و ikvm.runtime.ClassPathAssemblyClassLoader . |
جميع بيانات التعريف الأخرى مدعومة في تعريف مجموعة عناصر MSBuild Reference . |
IkvmReference
ليس متعديًا. لن يؤدي تضمينه في مشروع واحد وإضافة تبعية لهذا المشروع من مشروع ثانٍ إلى إتاحة نفس المرجع في المشروع الثاني. بدلاً من ذلك، قم بإضافة المرجع إلى كل مشروع.
لكي يتم حل كل مشروع إلى نفس التجميع الناتج، تأكد من أن إعداداته متطابقة.
يمكن تكوين إدخالات IkvmReference
المتعددة لتتضمن بعضها البعض كمراجع.
< 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
إما سمة محددة لبيان JAR، والتي يمكن العثور عليها في ملف META-INF/MANIFEST.MF
داخل JAR، أو قيمة تم إنشاؤها بناءً على اسم ملف JAR. راجع الوثائق لمزيد من المعلومات.
راجع الملف التمهيدي لـ ikvm-maven للحصول على تعليمات الاستخدام.
يوصي مشروع IKVM الأشخاص بعدم إعادة توزيع مكتبات Java FOSS التي تم تجميعها باستخدام IKVM عبر الأنظمة العامة مثل NuGet.org، إلا إذا كنت المالك الأصلي لهذا البرنامج ولديك سبب مقنع.
يؤدي إنشاء نسخ من مكتبات Java الحرة والمفتوحة المصدر ونشرها إلى آليات التوزيع مثل NuGet.org إلى حدوث ارتباك في النظام البيئي وصراعات التبعية. نحن نوفر نظامًا يتيح لمستخدمي مكتبات Java.NET الرجوع إلى تلك المكتبات مباشرةً من آليات نظام Java البيئي القياسية: Maven Central، وما إلى ذلك من خلال IKVM.Maven. تذكر أن عددًا قليلًا جدًا من المكتبات موجود في الفراغ. تعتمد المكتبات غالبًا على العشرات من المكتبات الأخرى. غالبًا ما تعتمد مكتبتان Java غير مرتبطتين على نفس مكتبة Java الأساسية. يجب إشراك طريقة معقدة لحل تعارض التبعية وتوحيد الإصدار في حل هذا التسلسل الهرمي لأي مشروع فردي. من المحتمل أنك ستقدم فئات مكررة لمستخدمي إصداراتك، أو ستجعل المستخدمين يعتمدون على الإصدار الخاطئ من المكتبات الأخرى.
بالإضافة إلى ما سبق، لا نضمن حاليًا بقاء واجهة برمجة التطبيقات (API) بين التجميعات المترجمة بشكل ثابت ومكتبات IKVM.Java وIKVM.Runtime مستقرة. لا يمكن ضمان تشغيل التجميع المترجم بشكل ثابت المبني على إصدار واحد من IKVM على إصدار أعلى من IKVM، حتى على مستوى التصحيح. نود الإعلان عن دعم أفضل لهذا الأمر في المستقبل، ولكن في الوقت الحالي يوجد الكثير من العمل المخطط لواجهات برمجة تطبيقات IKVM.Runtime وIKVM.Java التي لا نريد منعها. نظرًا لأننا نوفر أيضًا أدوات إنشاء لتسهيل عملية إعادة تجميع التجميعات من جهاز البناء، فإذا تم اتباع التوصيات، فيجب أن يكون لذلك تأثير محدود.
هناك استثناءات لهذه النصيحة، مثل عدم نشر المكتبة إلى Maven. في هذه الحالة، سيكون التوجيه هو الدعوة إلى نشر مكتبة Java الأصلية في الواقع إلى Maven، أو القيام بالعمل بنفسك، لأن هذا هو المكان المناسب لمكتبات Java.
لا يمكننا أن نجبرك على الالتزام بهذه النصيحة. ولكن من أجل صحة النظام البيئي، فإننا نحثك على أخذ ذلك بعين الاعتبار بنفسك.