2016-09-30 1 views
0

Ich versuche, ein nicht verwaltetes Glas zusammen mit etwas Scala-Code zu packen. Ich programmiere mit IntelliJ, und ich bin mir nicht sicher, ob das Paket korrekt erstellt wird.Ist diese build.sbt ok für die Verpackung?

Mein build.sbt ist wie folgt:

name := "InvokeCompiler" 

version := "1.0" 

scalaVersion := "2.11.8" 

exportJars := true 

val parserLocation = "lib/parser-0.0.1.jar" 

mappings in (Compile, packageBin) ~= { 

    _.filter(!_._1.getName.startsWith("Main")) 
} 

//unmanagedJars in Compile += file(parserLocation) 

mappings in (Compile, packageBin) <+= baseDirectory map { base => 

    (base/parserLocation) -> "parser-0.0.1.jar" 
} 

ich eine neue JAR-Datei erstellen möchten, die den nicht verwalteten Glas und den Code enthält ich geschrieben habe. Dieses Glas wird in .dll umgewandelt, um es in C# zu verwenden. Aber dabei wirft IKVMC alle möglichen Warnungen aus. Wenn ich die .dll hinzufüge produziert es die .dll enthält nur die Klasse, die ich selbst geschrieben habe.

EDIT: Nachdem Mr. Fords Kommentar zu lesen, hier sind die Warnungen und Fehler, die ich vom Laufen ikvmc auf dem erzeugten Glas erhalten:

PROMPT:> ikvmc -target:library compiled.jar 
IKVM.NET Compiler version 7.2.4630.5 
Copyright (C) 2002-2012 Jeroen Frijters 
http://www.ikvm.net/ 

note IKVMC0002: Output file is "compiled.dll" 
warning IKVMC0100: Class "org.nlogo.core.FrontEndInterface" not found 
warning IKVMC0100: Class "scala.Tuple2" not found 
warning IKVMC0100: Class "scala.reflect.ScalaSignature" not found 
warning IKVMC0100: Class "scala.Option" not found 
warning IKVMC0100: Class "org.nlogo.core.Program" not found 
warning IKVMC0100: Class "scala.collection.immutable.ListMap" not found 
warning IKVMC0100: Class "org.nlogo.core.ExtensionManager" not found 
warning IKVMC0100: Class "org.nlogo.core.CompilationEnvironment" not found 
warning IKVMC0100: Class "org.nlogo.core.Femto$" not found 
warning IKVMC0111: Emitted java.lang.NoClassDefFoundError in "Interface.ASTSingleton$.getFrontEndCompiledAsJSON(Ljava.lang.String;)Lscala.Tuple2;" 
    ("org.nlogo.core.FrontEndInterface") 
warning IKVMC0111: Emitted java.lang.NoClassDefFoundError in "Interface.ASTSingleton$.getFrontEndSingletion()Lorg.nlogo.core.FrontEndInterface;" 
    ("org.nlogo.core.Femto$") 

Antwort

1

Sie sagen nicht, wie Sie es sind Gebäude , so könnte das das erste Problem sein. Insbesondere sollten Sie den Befehl sbt publish-local verwenden. Um zu überprüfen, ob die Abhängigkeit enthalten ist, entpacken Sie einfach die JAR-Datei und suchen Sie.

Wenn Sie die resultierende JAR-Datei benötigen ausführbar sein, dann sollten Sie diese zu Ihrem build.sbt hinzufügen:

mainClass in Compile := Some("name.of.your.main.Class") 

ersetzen name.of.your.main.Class mit Ihrem Klassennamen. Sie tun etwas ähnliches, aber potenziell problematisch:

mappings in (Compile, packageBin) ~= { 
    _.filter(!_._1.getName.startsWith("Main")) 
} 

Das bedeutet, dass alles, was einen Klassennamen hat, die nicht mit Main startet, werden ausgefiltert. Wenn Sie keinen guten Grund dafür haben, würde ich es loswerden und die Hauptmethode des Pakets explizit angeben. Was mappings tut, ist described here.

+0

Ich möchte nicht, dass das Glas eine Hauptmethode hat, ich möchte, dass es eine Bibliothek ist, das ist alles. Durch das Extrahieren des Inhalts des resultierenden Jar werden anscheinend alle Abhängigkeiten hinzugefügt. Dann bleibt die Frage, warum ikvmc es nicht in dll konvertieren kann. Danke, zumindest scheint es mein sbt ist ok. :) – Marin

+0

@Marin Glücklich zu helfen! Denken Sie daran, Antworten aufzuschreiben und/oder anzunehmen, die Ihnen helfen, eine Lösung zu finden oder diese Situation aufzuklären. Dadurch werden Ihnen die Menschen in Zukunft eher helfen! Ich würde auch Ihren ursprünglichen Beitrag mit den Warnungen aktualisieren, die Sie erhalten, da es weitere Hinweise bietet, die uns helfen können. –

Verwandte Themen