Java命令行编译文件时出现的错误,找不到符号或软件包不存在等
来源:互联网 发布:长城证券交易软件下载 编辑:程序博客网 时间:2024/05/16 09:16
装载于http://blog.csdn.net/qq369201191/article/details/49946609
参考http://stackoverflow.com/questions/6665420/package-does-not-exist-error
参考http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html
配套代码上传在:http://download.csdn.net/detail/qq369201191/9287185
习惯了eclipse的自动编译,Java命令行编译、执行文件只会最基础的部分,就是对单文件的编译和执行,而且不包含任何外部JAR包。但有时候你还非得用命令行,会碰到一些问题,博主这里给出几种常见的问题及解决方法。
实验环境介绍
eclipse 的工作目录在D:\myeclipse\Workspaces
,里面有我们的一个工程example
,点进去,eclipse为我们设置好的几个文件.settings
、bin
、src
、.classpath
、project
,src
中存放的是源代码,结构就如上图所示。
在eclipse导入后显示的结构如下图所示,
小提示:包名com.example.controller
指的是在src/com/example/controller
文件夹下有个controller.java文件
model.java
是一个独立的类,不导入任何外部包 controller.java
导入了com.example.model.model
view.java
导入了com.example.controller.controller
和调用了一个外部Jar包
在观察案例代码时,需要特别注意此时命令行的当前目录,选项参数和Java文件,会有不同的结果
使用绝对路径
绝对路径就是从根目录开始的路径,Windows下就是以盘符开头,如”C:\”,Linux下以斜杠开头/home。
使用绝对路径的好处就是不管命令行的当前路径在哪里,都能正确的进行编译
案例一
D:\myeclipse\Workspaces\example>javac D:\myeclipse\Workspaces\example\src\com\example\model\*.java
- 1
案例二
D:\myeclipse\Workspaces\example\src>javac D:\myeclipse\Workspaces\example\src\com\example\model\*.java
- 1
使用相对路径
- 相对路径就是相对当前上下文环境,在命令行中就是相对命令行中前面的路径。
- 相对路径不以/开头,直接文件名。
如案例一,当前路径在D:\myeclipse\Workspaces\example\src
,相对这个路径,Java文件的相对路径就为com/example/model/*.java
。在案例二中当前路径有变化,相应得Java文件的相对路径也有变化。
案例一
D:\myeclipse\Workspaces\example\src>javac com/example/model/*.java
- 1
案例二
D:\myeclipse\Workspaces\example>javac src/com/example/model/*.java
- 1
基本概念已经理解了,上干货,一般命令行编译出现的问题:
问题一:找不到符号或软件包不存在
案例一
D:\myeclipse\Workspaces\example\src>javac com/example/controller/*.java
- 1
这种情况下可以正常得进行编译,因为你自己不指定classpath,一般系统默认的classpath会在当前路径中搜索。
案例二
D:\myeclipse\Workspaces\example>javac src/com/example/controller/*.java报错src\com\example\controller\controller.java:3: 软件包 com.example.model 不存在
- 1
- 2
- 3
- 4
我们切换目录,已上文绝对路径、相对路径的知识,正确给出Java文件的路径。这时会报出错误,软件包com.xxx
不存在。因为在controller.java
文件中有一个import com.example.model.model
,根据系统默认的classpath
会在当前路径下找,即D:\myeclipse\Workspaces\example
,很明显这个路径下没有com
文件。
解决方法,我们告诉编译器哪个目录下会有就行了,所以需要加入选项-cp xxxx 或 -classpath xxxx
D:\myeclipse\Workspaces\example>javac -cp src src/com/example/controller/*.java
- 1
加上参数-cp src
,告诉编译器可以去src中找,就不会有问题了。
同样的,classpath
可以是相对路径,也可以是绝对路径,本例中使用的是相对路径,命令行换路径后,所有参数都要换
D:\myeclipse\Workspaces>javac -cp example/src example/src/com/example/controller/*.java
- 1
下面这个是用绝对路径写的,相对路径和绝对路径以下不再叙述
javac -cp D:\myeclipse\Workspaces\example\src example/src/com/example/controller/*.java
- 1
问题二:JAR包怎么引入
首先还是在eclipse调通,建议专门建立一个lib
文件,然后把JAR包全部放在这里面,对项目转移也比较方便。
案例一
D:\myeclipse\Workspaces\example\src>javac com/example/view/view.java错误com\example\view\view.java:4: 软件包 com.google.gson 不存在import com.google.gson.Gson; ^com\example\view\view.java:14: 找不到符号符号: 类 Gson位置: 类 com.example.view.view Gson gson = new Gson(); ^com\example\view\view.java:14: 找不到符号符号: 类 Gson位置: 类 com.example.view.view Gson gson = new Gson(); ^3 错误
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
其实就一个问题,没找到JAR包。引入JAR就是注意要把路径写到JAR包的具体位置。废话少说,给出例子:
案例二
D:\myeclipse\Workspaces\example\src>javac -cp lib/gson-2.3.1.jar com/example/view/view.java错误com\example\view\view.java:3: 软件包 com.example.controller 不存在import com.example.controller.controller; ^com\example\view\view.java:10: 找不到符号符号: 类 controller位置: 类 com.example.view.view new controller(); ^2 错误
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
细心的你会发现,问题变了,因为我们引入了JAR包,所以因为JAR找不到的GSON问题已经没了,现在的问题就是找不到com.xxxx
,就变成问题一。这里解释一下,我们加入-cp xxxx或-classpath xxxx之后,会覆盖系统中的classpath,案例二这么写的确可以找到GSON类,但在碰到import com.example.model.model
时还在lib/gson-2.3.1.jar文件中查当然是找不到了,所以报错。方法很简单,在增加一个com.xxxx
文件夹的路径,没错就是当前路径。所以加上.;lib/gson-2.3.1.jar
。现在你是否对一开始配置Java环境时候,classpath中的路径要.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
有了理解呢?
特别注意的是在Linux下用冒号:进行分隔,而在Windows用分号进行分割。
案例三
正确D:\myeclipse\Workspaces\example\src>javac -cp .;lib/gson-2.3.1.jar com/example/view/view.java
- 1
- 2
问题三:指定class文件存放位置
默认的情况下,class文件和java文件存放在一个目录下,但你有没有发现,eclipse编译后会有两个目录,一个是src,存放的是用户编辑的源代码,定一个是bin文件,是编译后的字节码。它是加了-d
选项。
D:\myeclipse\Workspaces\example\src>javac -d ../bin com/example/model/model.java
- 1
这里bin文件和src文件是同级(看实验环境介绍),也是使用的是相对路径。打开文件后可以发现在bin文件中生成了com/example/model/model.class
具有层次结构的目录。
到此我相信你已经能基本上解决编译时的问题了。
总结
本文给出了几个常见问题的解决方案,以上代码都经过实验过,不会有问题。命令行中我们要注意相对路径和绝对路径的差别,已经Linux下和Windows下分隔符的差别(Linux用冒号,Windows下用分号)。另外设置classpath时,一般都加上当前路径.。
以上内容是博主查阅一些资料,并进行了总结,本来还想认真研读一下官方文档的,但因为是全英文,而且很具体,还是放弃了。以后在碰到问题继续完善好了。如果以上所述有问题,请及时指出,欢迎交流!
- Java命令行编译文件时出现的错误,找不到符号或软件包不存在等
- Java命令行编译文件时出现的错误,找不到符号或软件包不存在等
- javac编译出现“找不到符号”和"软件包不存在"的解决
- notepad++ 中使用 javac 编译在同一文件下的多个java文件 出现找不到符号的错误
- 关于命令行中javac 编译成功,用 java 运行 class 文件出现 “ 找不到或无法加载主类 ” 的问题
- java 编译 失败,提示找不到符号或程序包com.sun.image.codec.jpeg不存在的原因分析
- 从命令行启动Java程序出现“错误:找不到或无法加载主类“的解决办法
- cmd命令行下运行Java程序出现“找不到或无法加载主类”的错误
- cygwin下编译Java出现软件包net.tinyos.message不存在错误
- cmd命令行执行java程序的编译和执行的方法及可能出现找不到或无法加载主类的错误的解决
- 用cmd命令行编译JAVA程序时出现“找不到或无法加载主类”
- marven编译致命错误:在类路径或引导类路径中找不到软件包 java.lang的一种解决方法
- java命令行编译运行时提示"错误:找不到或无法加载主类"
- JDK编译错误,软件包不存在
- 利用命令行编译Java文件时出现“需要<>标识符”的错误
- java获取服务器IP,编译出现程序包不存在的错误
- 使用java.nio.file.WatchService监控文件夹里的文件再操作文件出现的“文件不存在或目录不存在”的错误
- java命令行编译时提示找不到或无法加载主类的问题
- OS知识总结(2)
- Lambda——JDK8推出的一个新特性
- Linux下设置变量的三种方法
- 石墨烯超材料仿真的有趣的文章
- 《算法4》优先队列和堆排序
- Java命令行编译文件时出现的错误,找不到符号或软件包不存在等
- 九九表
- Hive join优化(mapjoin,streamtable)
- 68.Scala并发编程原生线程Actor、Cass Class下的消息传递和偏函数实战解析及其在Spark中的应用源码解析
- XMl与Json学习笔记小结
- VLAN的划分及VLAN间的通信
- 欢迎使用CSDN-markdown编辑器
- Codeforces Round #143 (Div. 2) D. Magic Box
- 2017-10-12连续总结第二天