当前位置: 首页 > 面试题库 >

从Scala文件创建jar文件

劳韬
2023-03-14
问题内容

我是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


 类似资料:
  • 我必须创建一个jar文件。我是个初学者。我创建了一个清单文件forjar.txt, jar cfm v.jar forjar.txt gmain.class 它创建了一个jar文件。但是,当我运行它的时候,什么也没有发生。当我编译时,创建了将近25个类,因为我的文件中包含了许多类。那么,我应该在创建jar文件时也包括它吗?或者是否有任何简单的方法,包括特定文件夹的全部内容。我的文件夹也包含程序需要

  • 问题内容: 我有以下目录层次结构: 在这里,SigarTest是程序包名称。根文件夹位于jdk的bin文件夹中。从那里,我运行以下命令来创建我的项目的jar文件- 其中tools.jar,mongo-2.7.3.jar和sigar.jar是必需的,并且与根目录(jdk的bin文件夹)位于同一文件夹中。但是,运行它,我得到 我究竟做错了什么 ? 问题答案: 使用 目录 选项 哪些 临时改变目录( D

  • 问题内容: 我正在学习Java,但遇到了问题。我创建了6个不同的类,每个类都有自己的方法。我想为每个类创建可执行文件,即6个可执行文件。 到目前为止,我尝试了 我得到“无法访问jarfile cf”。我做错了,但我不知道怎么办。如果这意味着某种意义,我还将使用Eclipse IDE。 问题答案: 为了创建一个.jar文件,你需要使用jar而不是java: 另外,如果要使其可执行,则需要为应用程序指

  • 主要内容:打开Jar文件向导,,使用Jar文件向导,打开Jar文件向导 Jar File 向导可用于将项目的内容导出为 jar 文件。调出 Jar 文件向导 : 在包资源管理器中选择要导出的项目。如果要导出项目中的所有类和资源,只需选择项目即可。 单击文件菜单并选择导出。 在导出向导第一页的过滤器文本框中,输入JAR。 在 Java 类别下选择JAR文件。 单击“下一步”。 使用Jar文件向导 在 JAR 文件规范页面中 : 输入 JAR 文件名和

  • 编译java源文件后的下一个逻辑步骤是构建java归档文件,即JAR文件。 使用jar任务,使用Ant创建JAR文件非常简单。 jar任务的常用属性如下 - Sr.No. 属性和描述 1 basedir 输出JAR文件的基目录。 默认情况下,它设置为项目的基本目录。 2 compress 建议Ant在创建JAR文件时压缩文件。 3 keepcompression 虽然compress属性适用于单个

  • 问题内容: 我有一个相当最新的android studio版本,我在一个基本上应该是库的项目下创建了一个模块,在构建它时,它会创建一个“ .aar”文件,我想要的是.jar文件,因为库也应该与Eclipse一起使用。 该库还包含活动,是否可以通过任何方式创建可以在Eclipse和Android Studio上使用的.jar文件? 我已经创建了这个模块并尝试构建,因此它生成了.aar文件而不是.ja