2010-06-01 14 views
3

Je voulais utiliser l'API Flying Saucer Java dans .NET j'ai donc essayé d'utiliser IKVM pour convertir la bibliothèque Flying Saucer:En utilisant IKVM pour convertir un fichier JAR (soucoupe volante - xhtmlrenderer)

ikvmc core-renderer.jar 

Pour une raison quelconque, IKVMC m'a donné un exe core-renderer.exe donc je rebaptisés à core-renderer.dll, ajouté à mes assemblées et piraté loin

using java.io; 
using java.lang; 
using com.lowagie.text; 
using org.xhtmlrenderer.pdf; 

namespace flying_saucer 
{ 
    class FlyingSaucerApp 
    { 
     static void Main(string[] args) 
     { 
      // This works 
      DocumentException dummy = new DocumentException(); 

      ITextRenderer renderer = new ITextRenderer(); 


      // For some reason, this raises NoClassDefFoundError     
      renderer.setDocument(File("hello.xhtml").toURI().toURL().toString()); 
     } 
    } 
} 

pour une raison quelconque, il donne java.lang.NoClassDefFoundError: com.lowagie.text.DocumentException. Je ai réalisé DocumentException est quelque chose ITextRender() peut lancer, mais j'ai déjà inclus com.lowagie.text, des idées?

Répondre

5

Il est apparu que cette situation particulière, je devais rendre à la fois soucoupe volante et iText (une dépendance de soucoupe volante) et ont la référence d'assemblage soucoupe volante à sa dépendance:

ikvmc -target:library itext.jar 
ikvmc -target:library -reference:itext.dll core-renderer.jar 

(Pour les débutants : Si vous n'avez pas lu de documentation et que vous essayez simplement les commandes, vous devez également vous assurer que les fichiers DLL accompagnant IKVMC sont également présents - le moyen le plus simple consiste à vider tous les fichiers IKVMC à côté de vos fichiers iText JAR

+0

essayé vos commandes mais il dit core-renderer.dll est un type de fichier inconnu – Drahcir

+0

Évidemment, j'ai fait cette réponse dans une précipitation: p Je l'ai changé et encore évidemment, les arguments devraient être 'jar' files lol – kizzx2

+0

+1 Cela m'a sauvé tant d'efforts. Merci! –

2

Assurez-vous d'avoir inclus les assemblages IKVM.AWT.WinForms.dll, IKVM.OpenJDK.ClassLibrary.dll, IKVM.Runtime.dll et IKVM.Runtime.JNI.dll dans votre projet. Aussi, pour éviter de générer un exécutable et de le renommer, vous pouvez spécifier le commutateur -target:library lors de la compilation.

+0

Merci pour la note pour '-target: library'. Il s'est senti plus propre que d'avoir à renommer le fichier exe. Toujours obtenir l'erreur mentionnée si: \ – kizzx2