Czy możesz mi powiedzieć, jeśli to możliwe, jak wyeksportować aplikację Scala do normalnego pliku JAR uruchamianego bezpośrednio w JVM?
DziękiEksportuj aplikację Scala do działającego JAR
Odpowiedz
Jest to całkowicie możliwe, patrz na przykład to: running a maven scala project. Ponieważ Scala kompiluje się do kodu bajtowego Java, JVM nie jest nawet świadomy podstawowego języka implementacji.
W zasadzie po skompilowaniu źródeł Scala za pomocą scalac
otrzymasz kilka plików .class
, które możesz później spakować do pliku JAR. Następnie można po prostu uruchomić je przy użyciu:
$ java -cp "your.jar:scala-library.jar" com.example.Main
pamiętać, że koniecznością zawierać scala-library.jar
na CLASSPATH (obecnie jest to prawie 9 MiB ...) i określić klasę zawierającą main
metody.
Jeśli używasz sbt do budowania, możesz użyć jednej z wtyczek o jednym słoiku. Wszystkie zależności zostaną umieszczone w jednym dużym pliku JAR (zawierającym wszystkie pliki scala.jar). Oznacza to, że potrzebujesz tylko jednego pliku jar i nie musisz zarządzać wszystkimi zależnościami.
przykładu SBT montażu (głównie kopiowany z https://github.com/sbt/sbt-assembly):
projekt/plugins.sbt:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "X.X.X")
build.sbt:
import AssemblyKeys._ // put this at the top of the file
seq(assemblySettings: _*)
następnie generuje słoik z:
sbt assembly
Jako alternatywę dla odpowiedzi Fabiana, jeśli używasz Mavena, możesz użyć wtyczki zespołu. Coś jak:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>package-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>true</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifestEntries>
<SplashScreen-Image>splash.png</SplashScreen-Image>
</manifestEntries>
<manifest>
<mainClass>se.aptly.epm.main.PrognosisApp</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
To będzie spakować wszystkie swoje deps się, w tym scala-library.jar (jeśli jest to w twoich dużą liczbą wykazywanych zależności), ale nie będzie tak spłaszczone ze wszystkich klas rozpakowany. Dzieje się tak dlatego, że działające słoiki nie mogą wyjść z pudełka, używając kodu w słoikach w słoiku.
Aby dokonać tej pracy (który jest ładniejszy), użyj http://code.google.com/p/onejar-maven-plugin/, myślę, że to Maven mojo wrapper do jednej słoika: http://one-jar.sourceforge.net/
Istnieje również SBT-plugin dla jednej słoika: https://github.com/sbt/sbt-onejar
W celu spakowania aplikacji Swing w runnable słoik, roztwór, który pracował dla mnie było wyeksportować swój projekt jako normalny słoik pliku wykonywalnego (non) i zaktualizuj słoik na manifest do:
- dodać scala-library.jar scala-swing.Pakiety jar ścieżce
- wskazać główne klasy
Można znaleźć plik Manifest wewnątrz słoika (które można otworzyć z 7z na przykład) w następującej ścieżce:
META-INF/MANIFEST.MF
Dodaj następujące wiersze na końcu manifestu:
Main-Class: myPackage.myMainClass
Class-Path: scala-library.jar scala-swing.jar
Teraz twój słoik powinien zostać poprawnie wykonany po kliknięciu.
UWAGA: Więcej informacji na temat manifestowania można znaleźć tutaj: http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html.
Hers jest moim rozwiązaniem, maven -> stworzyć scala
runnable jar.
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.2</version>
<executions>
<execution>
<id>scala-compile-first</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<includes>
<include>**/*.scala</include>
</includes>
</configuration>
</execution>
<execution>
<id>scala-test-compile</id>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>xxx.xxx.xxx.Main</mainClass>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>reference.conf</resource>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
- 1. Dołącz replikę clojure/scala do działającego JVM
- 2. Dodawanie .jar do classpath (Scala)
- 3. Ładowanie pliki JAR w Scala
- 4. NoClassDefFoundError podczas uruchamiania pliku JAR Scala
- 5. Jak podpisać autonomiczne pliki JAR ProGuard'ed Scala?
- 6. Jak dodać biblioteki Jar do projektu IntelliJ Idea SBT Scala?
- 7. jak przekazać plik konfiguracyjny do pliku jar scala
- 8. Dołącz plik jar w tłumaczu Scala
- 9. Eksportuj repozytorium git do svn
- 10. Eksportuj odpowiedzi tkaniny do Excela
- 11. Eksportuj JasperReport do PDF OutputStream?
- 12. Eksportuj tabelę HTML do Excela
- 13. Eksportuj raporty Jenkinsa do Excela
- 14. Eksportuj plik crontab do pliku
- 15. Uruchom aplikację Scala w środowisku Scala IDE z błędami kompilacji
- 16. Jak skompilować aplikację Scala Hello World?
- 17. Importowanie pliku .jar (vaadin-6.4.8.jar) do skryptu Clojure (.clj)
- 18. Konwertuj istniejącą aplikację SBT Scala, aby grać
- 19. Eksportuj wiele tabel z SQL Server do XML do przywracania
- 20. Kod Ruby do JAR
- 21. Anulowanie długo działającego dopasowania do wyrażenia regularnego?
- 22. Tworzenie licznika czasu działającego asynchronicznie
- 23. Eksportuj dane z qtablewidget do csv
- 24. Eksportuj plik PDF do JPG w C#
- 25. Eksportuj dane z MATLAB do CSV
- 26. Eksportuj zawartość Canvas do formatu PDF
- 27. Eksportuj wynik zapytania jako CSV do PHP
- 28. Kod X: Eksportuj scenorys do obrazu
- 29. Eksportuj DataTable do programu Excel z EPPlus
- 30. Eksportuj zdenormalizowane dane z Excela do xml
Ten adres URL nie działa. Spróbuj https://github.com/sbt/sbt-assembly –