Java 如何创建一个jar。在课堂上使用它。在命令行中使用jar执行类?
我正试图部分解决一个问题。 这是我的第一部分 我需要创建一个JAR,从java类调用该JAR并在命令行中执行它 这就是我所做的 目录结构: root->com->test->sample->Sample1.java Sample1.java是这样的:Java 如何创建一个jar。在课堂上使用它。在命令行中使用jar执行类?,java,linux,jar,Java,Linux,Jar,我正试图部分解决一个问题。 这是我的第一部分 我需要创建一个JAR,从java类调用该JAR并在命令行中执行它 这就是我所做的 目录结构: root->com->test->sample->Sample1.java Sample1.java是这样的: package com.test.sample; public class Sample1 { // --- Native methods //public native boole
package com.test.sample;
public class Sample1 {
// --- Native methods
//public native boolean booleanMethod(boolean bool);
// --- Main method to test our native library
public void Sample1() {
}
public void callingBool() {
//System.loadLibrary("Sample1");
//boolean bool = this.booleanMethod(true);
//System.out.println("booleanMethod: returned" + bool);
System.out.println("booleanMethod: Called without loading
sample");
}
}
我用这个根目录创建了一个Jar。使用命令
jar cvf asd.jar com
Output:
added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/test/(in = 0) (out= 0)(stored 0%)
adding: com/test/sample/(in = 0) (out= 0)(stored 0%)
adding: com/test/sample/Sample1.java(in = 494) (out= 236)
(deflated 52%)
jar -tf asd.jar
META-INF/
META-INF/MANIFEST.MF
com/
com/test/
com/test/sample/
com/test/sample/Sample1.java
现在创建了JAR。我将JAR复制粘贴到另一个目录“jaronly”
将另一个Java文件Sample1Caller添加到/jaronly中,即:
import com.test.sample.Sample1;
public class Sample1Caller {
// --- Native methods
//public native boolean booleanMethod(boolean bool);
// --- Main method to test our native library
public static void main(String[] args) {
//System.loadLibrary("Sample1");
Sample1 sample = new Sample1();
sample.callingBool();
System.out.println("Callled Sample1 now" );
}
}
在此之后,我仅在/jar中编译Sample1Caller.java
javac -cp .:./asd.jar Sample1Caller.java
这将编译并生成2个类文件Sample1Caller.class和Sample1.class
我不确定是否应该创建Sample1.class(我已经从asd.jar中引用了它)
当我使用下面的命令执行Sample1Caller时,我得到以下错误
java -cp .:./asd.jar Sample1Caller
Exception in thread "main" java.lang.NoClassDefFoundError:
com/test/sample/Sample1
at Sample1Caller.main(Sample1Caller.java:12)
Caused by: java.lang.ClassNotFoundException: com.test.sample.Sample1
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.lo
Class(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
它编译但不执行。我的执行命令、生成.jar文件或用java编译jar是否有问题
PS:我以前几乎没有在这里提出任何问题,所以请原谅我的格式设置。JAR文件应该包含类而不是源。因此,在创建asd.jar之前,应该编译Sample1.java。这行就行了
javac com/test/sample/*.java
但是Sample1.java仍然在JAR中,您不希望它在那里
要为构建添加更多结构,我建议您创建以下文件夹结构:
sample_project
sample_project/src
sample_project/src/com/test/sample/Sample1.java
sample_project/target
sample_project/build.bat
那么build.bat的内容将是:
::编译
cd src
javac com/test/sample/*.java-d../target
::创建jar
cd../目标
jar cvf asd.jar com
::完成
光盘
在编译Sample1.java
之后,您的JAR应该包含com/test/sample/Sample1.class
,而不是(仅)源文件com/test/sample/Sample1.java
。。。。这是因为您在运行jar
之前没有编译Sample1
,谢谢。这真是个愚蠢的错误。我只是错过了编译我的.java。也许我应该休息一下:)我应该从我的罐子通货紧缩的输出中意识到这一点谢谢。这真是个愚蠢的错误。我只是错过了编译我的.java。也许我应该休息一下:)我应该从罐子的输出中意识到这一点。