Допустим, у меня есть Hello.scala.
object HelloWorld {
def main(args: Array[String]) {
println("Hello, world!")
}
}
Я мог бы запустить 'scalac', чтобы получить HelloWorld.class и HelloWorld $ .class.
Я могу запустить используя 'scala -classpath. Привет'. Но я не могу запустить 'java -cp. Hello».
- Почему это? Разве Scala не взаимодействует с Java?
- Есть ли способ запустить класс scala с Java?
- Почему скаляр создает два файла классов?
- Есть ли у scala что-то вроде 'lein uber'? Я имею в виду, есть ли в Scala некоторые инструменты, которые генерируют один JAR-файл для распространения?
Плагин IntelliJ + scala
Я мог бы получить банку, содержащую все для запуска файла scala, с плагином IntelliJ + scala, я думаю, что это лучший вариант, чем proguard.
Настройка Proguard
Благодаря Морицу я мог сделать один файл jar, который будет работать с java.
Это общая структура.
|-- classes
| |-- HelloWorld$.class
| |-- HelloWorld.class
| `-- META-INF
| `-- MANIFEST.MF
`-- your.pro
your.pro имеет следующее содержимое.
-injar classes
-injar /Users/smcho/bin/scala/lib/scala-library.jar(!META-INF/MANIFEST.MF)
-outjar main.jar
-libraryjar /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Classes/classes.jar
-dontwarn
-dontnote
-ignorewarnings
-optimizationpasses 2
-optimizations !code/allocation/variable
-keep,allowoptimization,allowshrinking class * { *; }
-keepattributes SourceFile,LineNumberTable
-keepclasseswithmembers public class HelloWorld { public static void main(java.lang.String[]); }
MANIFEST.MF имеет следующую настройку. Не забудьте включить [CR] или пустую строку.
Main-Class: HelloWorld
Я загружаю proguard 4.5.1, чтобы поместить его в ~ / bin / proguard4.5.1.
Запустив proguard, я мог сделать банку (main.jar), и она отлично работает.
prosseek:classes smcho$ java -Xmx512m -jar /Users/smcho/bin/proguard4.5.1/lib/proguard.jar @your.pro
ProGuard, version 4.5.1
Reading program directory [/Users/smcho/Desktop/scala/proguard/classes/classes]
Reading program jar [/Users/smcho/bin/scala/lib/scala-library.jar] (filtered)
Reading library jar [/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/classes.jar]
Preparing output jar [/Users/smcho/Desktop/scala/proguard/classes/main.jar]
Copying resources from program directory [/Users/smcho/Desktop/scala/proguard/classes/classes]
Copying resources from program jar [/Users/smcho/bin/scala/lib/scala-library.jar] (filtered)
prosseek:classes smcho$ java -jar main.jar hello
или
java -cp main.jar HelloWorld
Я загружаю файл примера zip здесь . И, скалярный исходный код здесь .