从Scala文件创建jar文件

我是Scala的新手,也不了解Java。我想从一个简单的Scala文件中创建一个jar文件。所以我有了我的HelloWorld.scala,生成了一个HelloWorld.jar。

Manifest.mf:

Main-Class: HelloWorld

在控制台中,我运行:

fsc HelloWorld.scala

jar -cvfm HelloWorld.jar Manifest.mf HelloWorld\$.class HelloWorld.class

java -jar HelloWorld.jar

=> "Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/jar"

java -cp HelloWorld.jar HelloWorld

=> Exception in thread "main" java.lang.NoClassDefFoundError: scala/ScalaObject

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:675)

at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)

at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)

at java.net.URLClassLoader.access$100(URLClassLoader.java:56)

at java.net.URLClassLoader$1.run(URLClassLoader.java:195)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:188)

at java.lang.ClassLoader.loadClass(ClassLoader.java:316)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:280)

at java.lang.ClassLoader.loadClass(ClassLoader.java:251)

at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)

at hoppity.main(HelloWorld.scala)

回答:

示例目录结构:

X:\scala\bin

X:\scala\build.bat

X:\scala\MANIFEST.MF

X:\scala\src

X:\scala\src\foo

X:\scala\src\foo\HelloWorld.scala

HelloWorld.scala:

//file: foo/HelloWorld.scala

package foo {

object HelloWorld {

def main(args: Array[String]) {

println("Hello, world!")

}

}

}

MANIFEST.MF:

Main-Class: foo.HelloWorld

Class-Path: scala-library.jar

build.bat:

@ECHO OFF

IF EXIST hellow.jar DEL hellow.jar

IF NOT EXIST scala-library.jar COPY %SCALA_HOME%\lib\scala-library.jar .

CALL scalac -sourcepath src -d bin src\foo\HelloWorld.scala

CD bin

jar -cfm ..\hellow.jar ..\MANIFEST.MF *.*

CD ..

java -jar hellow.jar


为了成功使用 -jar 开关,您需要在 META-INF / MANIFEST.MF 文件中有两个条目:主类;任何依赖项的相对URL。文档说明:

执行封装在JAR文件中的程序。第一个参数是JAR文件的名称,而不是启动类的名称。为了使此选项起作用,JAR文件的清单必须包含Main-

Class形式的行:classname。在这里,类名标识具有公共静态void main(String []

args)方法的类,该方法充当应用程序的起点。有关使用Jar文件和Jar文件清单的信息,请参见Jar工具参考页和Java教程的Jar跟踪。

使用此选项时,JAR文件是所有用户类的源,

  • java命令行用法
  • 清单规格

(注意:大多数ZIP应用程序都可以检查JAR文件;我可能忽略了批处理脚本中目录名称中的空格; Scala代码运行程序版本2.7.4.final。)


为了完整起见,请使用等效的bash脚本:

#!/bin/bash

if [ ! $SCALA_HOME ]

then

echo ERROR: set a SCALA_HOME environment variable

exit

fi

if [ ! -f scala-library.jar ]

then

cp $SCALA_HOME/lib/scala-library.jar .

fi

scalac -sourcepath src -d bin src/foo/HelloWorld.scala

cd bin

jar -cfm ../hellow.jar ../MANIFEST.MF *

cd ..

java -jar hellow.jar

以上是 从Scala文件创建jar文件 的全部内容, 来源链接: utcz.com/qa/408611.html

回到顶部