我有一个包含单个模块和一些依赖项的项目.我想在一个单独的目录中创建一个包含已编译模块的jar.另外,我希望我的模块旁边有依赖项.
无论我如何扭曲IntelliJ的"构建jar"进程,我模块的输出都显示为空(除了META-INF文件).
如何运行.jar由sbt生成的文件package?
我用一个.scala源创建了一个非常简单的例子:
package org.pack {
class ScalaParser(files: Array[String]) {
def doAll() = {
println("hello")
}
}
object Main {
def main(args: Array[String]): Unit = {
val sp = new ScalaParser(args)
sp.doAll()
}
}
}
Run Code Online (Sandbox Code Playgroud)
跑完之后
$ sbt
> compile
> package
Run Code Online (Sandbox Code Playgroud)
.jar创建于/target/scala-<version>.如果我尝试运行它,它将无法给出此错误:
$ java -jar package_2.9.2-0.1.jar
Exception in thread "main" java.lang.NoClassDefFoundError: scala/ScalaObject
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at …Run Code Online (Sandbox Code Playgroud) 从Java-8开始,我知道类加载器的层次结构如下: -
Bootstrap类加载器 - >扩展类加载器 - >应用程序类加载器
Java 9中类加载器层次结构的变化是什么?它是如何工作的?
我正在使用Apache Tika编写一个主题建模程序,以从其他文件类型中提取文本内容.实际上它在Eclipse上完美运行.但是当我从Window 10的命令提示符导出到JAR文件时使用.当它尝试代码时出现此错误消息:"parser.parse(stream,handler,metadata,parseContext);"
"java.lang.SecurityException:禁止包名:java.sql"
我没有在这里上传我的java代码,因为我不认为它们是问题的根源.因为它在Eclipse IDE中完美运行.所以有人知道为什么它只会在我尝试从命令行运行时发生.Eclipse IDE内部和外部的JVM有什么不同?谢谢.
package Views;
import java.io.*;
import org.apache.commons.io.FileUtils;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.sax.BodyContentHandler;
public class TestTika {
public static void main(String[] args) throws IOException {
String inputFolderName = "data";
String outputFolderName = "data_text";
System.out.println("Extracting text data from '" + inputFolderName + "' to '" + outputFolderName + "'");
FileUtils.deleteDirectory(new File(outputFolderName)); // Delete the old file in this directory
System.out.println("Delete all of the old files in directory'" + outputFolderName + "' successfully \n"); …Run Code Online (Sandbox Code Playgroud)