Можно ли выполнить Java-приложение (которое зависит от многих сторонних библиотек) из кода C# с использованием таких инструментов, как IKVM/JNI4Net?
Я хочу вызвать API Java из кода C#. Мой Java API - это файл jar, в который входят несколько сторонних библиотек. Я пытаюсь использовать IKVM и JNI4Net. Я могу вызвать несколько функций Java, но когда код имеет зависимость от сторонних библиотек, он показывает ошибку: NoClassDefFoundError'произошла в DLL. Мой вопрос, возможно ли выполнить Java-приложение (которое зависит от многих сторонних библиотек) из кода C# с использованием таких инструментов на основе JNI?
2 ответа
Не будучи экспертом jni4net, у меня есть некоторый опыт в этом деле. С jni4net вам нужно использовать BridgeSetup и вызвать один из его AddClassPath()
методы для создания classpath с вашими сторонними библиотеками.
Например, что-то вроде этого:
namespace My.Lib
{
using System;
using net.sf.jni4net;
public static class MyClass
{
public static void Init()
{
// create the setup and register the Java classpath
BridgeSetup bridgeSetup = new BridgeSetup(true);
bridgeSetup.AddClassPath("lib/myLib1.jar");
bridgeSetup.AddClassPath("lib/myLib2.jar");
// add others ...
// check the actual classpath we got
Console.WriteLine("registered classpath : ");
foreach (String s in bridgeSetup.JVMCLassPath) Console.WriteLine(s);
// now create the JVM
Bridge.CreateJVM(bridgeSetup);
}
}
}
Используя IKVM, я смог сделать это, собрав свой Java-проект в один JAR-файл. Я использовал Netbeans в качестве своей IDE и следовал инструкциям, приведенным в этой статье http://www.oracle.com/technetwork/java/javamail/single-jar-141905.html