Comment puis je call.NET code de Java?


Je ne cherche pas la réponse habituelle comme les services Web. Je cherche une solution légère à exécuter dans la même machine.

Edit: Je cherche un moyen en Java d'appeler les méthodes. NET

Author: Jon Seigel, 2008-11-12

6 answers

Je crois que Java peut parler à COM et que.NET peut exposer les interfaces COM. Donc, cela peut être une solution très légère qui ne nécessite aucune 3ème partie. Il existe également la possibilité d'utiliser des sockets pour communiquer entre les programmes, ce qui ne nécessiterait pas l'installation d'une instance lourde d'IIS sur la machine.

 10
Author: Nick Berardi, 2008-11-12 12:03:50

Je suis l'auteur de jni4net, pont interprocessus open source entre JVM et CLR. Il est construit sur le dessus de JNI et PInvoke. Aucun code C / C++ nécessaire. J'espère que ça va vous aider.

 22
Author: Pavel Savara, 2009-10-31 19:25:51

Avez-vous regardé IKVM?

 5
Author: Jon Skeet, 2008-11-12 11:37:16

Avez-vous regardé dans l'interface native Java?

Ce que j'ai fait dans le passé, c'est écrire une bibliothèque C, qui est appelable à la fois à partir de Java et.NET (et aussi COM, NSIS scripting language et d'autres technologies).

Le JNI fonctionnerait bien si vous ne voulez exposer que quelques méthodes, mais cela pourrait devenir difficile si vous vouliez, par exemple, exposer l'ensemble du.NET framework, en raison du nombre de fichiers d'en-tête et de méthodes d'encapsulation que vous auriez besoin de créer.

 2
Author: RB., 2008-11-12 12:34:54

Nous avons essayé IKVM dans notre environnement de production mais il a continué à planter. Nous utilisons JNBridge qui est un produit commercial mais est très stable et fonctionne bien dans notre ASP.NET environnement.

 1
Author: Tony Whalen, 2008-11-12 11:45:36

Si vous êtes prêt à exécuter votre code Java sous.NET (ou Mono), il est possible de le faire en utilisant IKVM.

Parce que (pour autant que je sache) les compilateurs Java actuels ne lisent pas les assemblys.NET, il y a 2 étapes. Vous devez d'abord générer un pot de talon contenant des classes et des méthodes factices avec les signatures de l'assembly.NET que vous souhaitez utiliser, afin que javac (ou votreE) sache quelles méthodes sont disponibles. Par exemple, si vous souhaitez utiliser quelque chose dans le. NET principal bibliothèque standard de Java, exécuter

ikvmstub mscorlib

Qui génère le talon mscorlib.jar. (Il a trouvé l'assemblage Mono mscorlib.dll pour moi automatiquement sous Linux, mais s'il échoue, vous devrez peut-être donner le chemin complet à la DLL.)

Vous pouvez ensuite écrire un fichier Java qui l'utilise, par exemple, (, basé sur l'exemple de la documentation IKVM):

import cli.System.IO.Directory;
public class IKVMTest {
    public static void main(String[] args) {
        for(String file : Directory.GetFiles(".")) // From .NET standard library
            System.out.println(file);              // From Java standard library
    }
}

Notez que les packges CLI sont préfixés par cli., d'où l'importation cli.System au lieu de juste System.

Pour compiler, incluez le talon JAR sur le chemin de classe:

javac -classpath mscorlib.jar IKVMTest.java

Étant donné que la liaison Java se produit lors de l'exécution, les fichiers de sortie class utilisent les méthodes des noms et signatures souhaités, mais vous pouvez échanger les méthodes de stub factice avec les méthodes. NET réelles lorsqu'elles sont exécutées sous IKVM:

ikvm IKVMTest

Et il imprimera les fichiers dans le répertoire courant en appelant les méthodes.NET.

 0
Author: Mechanical snail, 2012-07-27 07:14:05