Bạn có thể cho tôi biết, nếu điều này có thể, làm thế nào để xuất một ứng dụng Scala sang một JAR runnable bình thường có thể chạy trực tiếp trong JVM?
Cảm ơnXuất ứng dụng Scala sang runnable JAR
Trả lời
Hoàn toàn có thể, xem ví dụ: running a maven scala project. Vì Scala biên dịch sang Java bytecode, JVM thậm chí không nhận thức được ngôn ngữ triển khai cơ bản.
Về bản chất sau khi biên dịch các nguồn Scala bằng cách sử dụng scalac
, bạn sẽ nhận được một bó các tệp .class
mà sau này bạn có thể đóng gói vào một JAR. Sau đó, bạn chỉ có thể chạy chúng bằng cách sử:
$ java -cp "your.jar:scala-library.jar" com.example.Main
Lưu ý rằng bạn phải bao gồm scala-library.jar
trên CLASSPATH (hiện tại nó gần như là 9 MiB ...) và chỉ định lớp chứa main
phương pháp.
Nếu bạn sử dụng sbt để xây dựng, bạn có thể sử dụng một trong các plugin một-jar. Họ sẽ đặt tất cả các dependencys vào một tệp jar lớn (bao gồm tất cả các tệp scala.jar). Điều này có nghĩa là bạn chỉ cần một tệp jar và không phải quản lý tất cả các tệp phụ thuộc.
Như một ví dụ với SBT-lắp ráp (chủ yếu là sao chép từ https://github.com/sbt/sbt-assembly):
dự án/plugins.sbt:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "X.X.X")
build.sbt:
import AssemblyKeys._ // put this at the top of the file
seq(assemblySettings: _*)
sau đó bạn có thể tạo ra bình với:
sbt assembly
Để thay thế cho câu trả lời của Fabian, nếu bạn đang sử dụng Maven, bạn có thể sử dụng plugin lắp ráp. Một cái gì đó như:
<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>
Điều đó sẽ gói tất cả DEPS của bạn lên, trong đó có scala-library.jar (nếu đó là trong DEPS của bạn), nhưng sẽ làm như vậy phẳng với mọi tầng lớp giải nén. Điều này là do jar của runnable không thể ra khỏi mã sử dụng hộp trong lọ trong bình.
Để đảm rằng công việc (đó là đẹp hơn), sử dụng http://code.google.com/p/onejar-maven-plugin/, tôi nghĩ rằng đó là một Maven mojo wrapper để một jar: http://one-jar.sourceforge.net/
Ngoài ra còn có một SBT-plugin cho một jar: https://github.com/sbt/sbt-onejar
để gói một ứng dụng swing trong một jar Runnable, các giải pháp mà làm việc cho tôi là để xuất khẩu dự án của tôi như một bình thường jar tập tin (không thực thi) và cập nhật của jar manifest tới:
- thêm scala-library.jar scala-swing.gói jar vào con đường
- cho biết lớp chính
Bạn có thể tìm thấy các tập tin Manifest bên trong lọ (mà bạn có thể mở ra với 7z ví dụ) tại đường dẫn sau:
META-INF/MANIFEST.MF
Add các dòng sau ở cuối tệp kê khai:
Main-Class: myPackage.myMainClass
Class-Path: scala-library.jar scala-swing.jar
Bây giờ bình của bạn nên thực hiện đúng khi nhấp vào nó.
LƯU Ý: Bạn có thể tìm thêm thông tin về tệp kê khai tùy chỉnh tại đây: http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html.
Hers là giải pháp của tôi, maven -> tạo scala
jar chạy được.
<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. Không có âm thanh sau khi xuất sang jar
- 2. Các JAR Runnable thiếu Ảnh/Tệp (Tài nguyên)
- 3. Thêm .jar vào classpath (Scala)
- 4. Xuất khẩu .jar Applet trong Eclipse
- 5. Xuất sang jar Chạy được với các thư viện mã nguyên bản khác trong eclipse
- 6. NoClassDefFoundError khi chạy tập tin Scala jar
- 7. Eclipse - Extract/gói các thư viện cần thiết vào JAR Runnable cùng
- 8. Thêm tệp JAR vào ứng dụng Android
- 9. Tạo tệp jar từ tệp Scala
- 10. Eclipse xuất JAR trong WAR
- 11. tải tập tin từ JAR trong Scala
- 12. Đặt .jar làm ứng dụng mặc định? (Mac OSX)
- 13. Scala xem ứng dụng puzzler
- 14. Cách tạo tệp .jar hoặc xuất jar trên IntelliJ (như xuất nhật java lưu trữ eclipse)
- 15. Eclipse: xuất khẩu sang .jar VÀ bao gồm các file tài nguyên (ANT)
- 16. Android và Java: sử dụng runnable
- 17. Sử dụng PHPExcel để xuất sang xlsx
- 18. Xuất sqlite db trong ứng dụng phonegap
- 19. cách chuyển ứng dụng android sang blackberry
- 20. Tôi làm cách nào để đưa biểu tượng của mình vào khi xuất dự án sang tệp jar
- 21. Android không xuất được ứng dụng
- 22. Ma trận sang CSV ở Scala
- 23. Chuyển đổi một ứng dụng Winform sang ứng dụng WPF
- 24. Lỗi xuất gói ứng dụng đã xuất Android xuất hiện
- 25. Xuất sang .xlsx
- 26. IntelliJ IDEA ứng dụng android scala
- 27. lập trình ứng dụng scala trên iphone?
- 28. Các ứng dụng GUI Scala và Swing
- 29. Chuyển đổi ứng dụng Silverlight sang WPF
- 30. Nhà xuất bản ứng dụng
Url đó không hoạt động. Thử https://github.com/sbt/sbt-assembly –