web-dev-qa-db-fra.com

Utilisez un .jar Java en C #?

Je suis un programmeur débutant, veuillez donc être descriptif dans vos réponses.

J'essaie d'utiliser une API Java donnée en tant que fichier .jar dans mon application C # .net. Je ne connais pas beaucoup Java, mais ce fichier .jar dit "pas d'attribut manifeste de classe principale" lorsque j'essaie de l'exécuter, cela signifie donc que c'est une bibliothèque? Cette Java API est également livrée avec un fichier .Java qui montre comment utiliser la bibliothèque mais je ne vois pas le code à l'intérieur du .jar.

J'ai trouvé cette question sur ce site, et l'une des réponses indique: "De manière simple, vous pouvez compresser vos Java classes dans un fichier jar puis en C # utiliser la classe Process pour exécuter et map IO stream. " Je suis semi-familier avec la classe Process en C # mais je ne comprends pas comment je pourrais l'utiliser pour utiliser une bibliothèque Java dans mon projet C # .net.

Est-ce possible? ou cette réponse était-elle incorrecte?

Si oui, pourriez-vous expliquer comment je peux utiliser la bibliothèque .jar dans mon application C #.

51
timmyg

Vous pouvez le faire en utilisant IVKM.Net. IVKM.NET inclut une application appelée ikvmc. Voici la documentation de cet outil:

http://www.ikvm.net/userguide/ikvmc.html

Pour l'utiliser, compilez votre code Java Java dans un Jar.

Exécutez ensuite le programme ikvmc:

ikvmc myCode.jar

Si votre jar contient une fonction main (), il sera converti en un exe qui peut être exécuté sur le CLR. Sinon, il sera converti en dll. Pour utiliser les DLL dans votre projet, ajoutez-les simplement comme références dans Visual Studio et la même API qui était disponible pour vous dans Java sera accessible dans votre application .Net.

Vous pouvez également inclure la DLL IKVM.GNU.Classpath.dll d'ikvmc et utiliser les bibliothèques de classes standard Java Java dans votre application).

72
Stephen Curial

Jetez un oeil à IKVM ... il a des outils pour vous donner un certain niveau d'interopérabilité. Lorsque vous dites Java API, je suppose que vous voulez appeler certaines fonctionnalités du pot plutôt que de simplement les exécuter

6
Rad