Можно ли выполнить 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

Другие вопросы по тегам