fedroa下编译java,出现bash: javac: 未找到命令.而我有java版本信息。怎么破?
发布网友
发布时间:2022-05-05 03:21
我来回答
共1个回答
热心网友
时间:2023-10-09 11:23
您好,
打jar包使用jar命令。
View Code
//D:\src\A.java
package src;
public class A{
private int value;
public A(){
value = 0;
}
public void setValue(int var){
value = var;
}
public int getValue(){
return value;
}
}
首先在src目录下运行javac A.java生成A.class。之后在D:\目录下运行jar -cvf test.jar
src就会在D:\这个目录下生成test.jar,即我们打的jar包。那么我们如何使用这个jar包呢?首先必须把test.jar的路径加入到classpath中。之后我们有如下的测试程序。
View Code
import src.*; //必须得有此import,因为A.class位于src包中。如果不写则编译不通过。
public class B{
public static void main(String[] args){
A a = new A();
}
}
jar文件其实是一个压缩包,可以很容易的用解压软件进行解压。解压后有如下目录关系:
test.jar
|--src---|--A.java
|--A.class
这里可以把test.jar当成目录来处理,javac会自动在classpath中解压这个test.jar并根据B.java中的import找到其中的src文件夹下的A.class文件并使用。
现在看看我们的打包命令 jar -cvf test.jar src //意思是把src文件夹整个打包
如果我们这么打包: 在src目录下运行jar -cvf test.jar A.java
A.class,行吗?答案是不行。因为这样打包后路径关系为:
test.jar
|--A.java
|--A.class
javac寻找A.class时发现test.jar下不存在src目录,则会报不存在包的错误。所以大家一定要注意打包时应该把那个目录打进去,不应把哪个目录打进去。如果对属于默认包的class文件打包,则只要把jar包路径添加到classpath中即可使用,无需再在程序中使用import。当然jar命令还有很多参数可选,来满足各种不同需要的打包需求。追问这个是基于LINUX编译环境,因为是OpenJdk 所以我没有添加它的变量路径。