JAVA命令符找不到符號_[轉]Java命令行編譯文件時出現的錯誤,找不到符號或軟件包不存在等...

標簽(空格分隔): Javajavascript

習慣了eclipse的自動編譯,Java命令行編譯、執行文件只會最基礎的部分,就是對單文件的編譯和執行,并且不包含任何外部JAR包。但有時候你還非得用命令行,會碰到一些問題,博主這里給出幾種常見的問題及解決方法。html

實驗環境介紹

7b4e481c5f9248a0b7bcd91f.html

eclipse 的工做目錄在D:\myeclipse\Workspaces,里面有咱們的一個工程example,點進去,eclipse為咱們設置好的幾個文件.settings、bin、src、.classpath、project,src中存放的是源代碼,結構就如上圖所示。java

在eclipse導入后顯示的結構以下圖所示,

7b4e481c5f9248a0b7bcd91f.html

小提示:包名com.example.controller指的是在src/com/example/controller文件夾下有個controller.java文件python

model.java是一個獨立的類,不導入任何外部包

controller.java導入了com.example.model.model

view.java導入了com.example.controller.controller和調用了一個外部Jar包linux

在觀察案例代碼時,須要特別注意此時命令行的當前目錄,選項參數和Java文件,會有不一樣的結果objective-c

使用絕對路徑

絕對路徑就是從根目錄開始的路徑,Windows下就是以盤符開頭,如”C:\”,Linux下以斜杠開頭/home。sql

使用絕對路徑的好處就是無論命令行的當前路徑在哪里,都能正確的進行編譯windows

案例一

D:\myeclipse\Workspaces\example>javac D:\myeclipse\Workspaces\example\src\com\example\model\*.java

1

7b4e481c5f9248a0b7bcd91f.html

1

案例二

D:\myeclipse\Workspaces\example\src>javac D:\myeclipse\Workspaces\example\src\com\example\model\*.java

1

7b4e481c5f9248a0b7bcd91f.html

1

使用相對路徑

相對路徑就是相對當前上下文環境,在命令行中就是相對命令行中前面的路徑。

相對路徑不以/開頭,直接文件名。

如案例一,當前路徑在D:\myeclipse\Workspaces\example\src,相對這個路徑,Java文件的相對路徑就為com/example/model/*.java。在案例二中當前路徑有變化,相應得Java文件的相對路徑也有變化。

案例一

D:\myeclipse\Workspaces\example\src>javac com/example/model/*.java

1

7b4e481c5f9248a0b7bcd91f.html

1

案例二

D:\myeclipse\Workspaces\example>javac src/com/example/model/*.java

1

7b4e481c5f9248a0b7bcd91f.html

1

基本概念已經理解了,上干貨,通常命令行編譯出現的問題:

問題一:找不到符號或軟件包不存在

案例一

D:\myeclipse\Workspaces\example\src>javac com/example/controller/*.java

1

7b4e481c5f9248a0b7bcd91f.html

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

7b4e481c5f9248a0b7bcd91f.html

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

7b4e481c5f9248a0b7bcd91f.html

1

加上參數-cp src,告訴編譯器能夠去src中找,就不會有問題了。

一樣的,classpath能夠是相對路徑,也能夠是絕對路徑,本例中使用的是相對路徑,命令行換路徑后,全部參數都要換

D:\myeclipse\Workspaces>javac -cp example/src example/src/com/example/controller/*.java

1

7b4e481c5f9248a0b7bcd91f.html

1

下面這個是用絕對路徑寫的,相對路徑和絕對路徑如下再也不敘述

javac -cp D:\myeclipse\Workspaces\example\src example/src/com/example/controller/*.java

1

7b4e481c5f9248a0b7bcd91f.html

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

7b4e481c5f9248a0b7bcd91f.html

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

7b4e481c5f9248a0b7bcd91f.html

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

7b4e481c5f9248a0b7bcd91f.html

1

2

問題三:指定class文件存放位置

默認的狀況下,class文件和java文件存放在一個目錄下,但你有沒有發現,eclipse編譯后會有兩個目錄,一個是src,存放的是用戶編輯的源代碼,定一個是bin文件,是編譯后的字節碼。它是加了-d選項。

D:\myeclipse\Workspaces\example\src>javac -d ../bin com/example/model/model.java

1

7b4e481c5f9248a0b7bcd91f.html

1

這里bin文件和src文件是同級(看實驗環境介紹),也是使用的是相對路徑。打開文件后能夠發如今bin文件中生成了com/example/model/model.class具備層次結構的目錄。

到此我相信你已經能基本上解決編譯時的問題了。

總結

本文給出了幾個常見問題的解決方案,以上代碼都通過實驗過,不會有問題。命令行中咱們要注意相對路徑和絕對路徑的差異,已經Linux下和Windows下分隔符的差異(Linux用冒號,Windows下用分號)。另外設置classpath時,通常都加上當前路徑.。

以上內容是博主查閱一些資料,并進行了總結,原本還想認真研讀一下官方文檔的,但由于是全英文,并且很具體,仍是放棄了。之后在碰到問題繼續完善好了。若是以上所述有問題,請及時指出,歡迎交流!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454826.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454826.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454826.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#中POST數據和接收的幾種方式

POST方式提交數據,一種眾所周知的方式: html頁面中使用form表單提交,接收方式,使用Request.Form[""]或Request.QueryString[""]來獲取。 這里介紹另外一種POST方式和接收方式,就是將整個數據作為加…

java自動注入注解_Spring自動注解標簽@Autowired不能注入xml配置的bean嗎?

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓配置service的xmlservice代碼public class LoginServiceImpl extends BaseDaoServiceImpl implements LoginService {Overridepublic Map queryByUserName(String userName){IDao iDao super.getAppDao();return (Map)iDao.queryF…

一卡通vip充值消費線上oracle庫服務器故障排查過程

上圖是oracle體系總架構圖今天突然公司所有終端pos機不能刷卡消費,財務室不能充值,一下很多電話打過來了,第一反應肯定數據庫出問題了,登陸到數據庫服務器,果然sqlplus連進去后就不斷提示要求輸入用戶名,彈…

最詳細的Linux下C編程

gcc 目 錄 1. gcc 1. makefile寫法 2. gcc_egcs使用 3. gdb使用 4. gcc常用選項對代碼的影響 1. 一般情況 2. -O 編譯選項 3. -O2 編譯選項 4. -fomit-frame-pointer 編譯選項 5. -fomit-frame-pointer…

sqlserver 存儲過程 增加

CREATE PROCEDURE [dbo].[InsertMessage]( strTable varchar(50), --表名 strValues nvarchar(1000), --要插入的數據(用英文逗號分隔),如果是字符串類型,需加單引號 only_field varchar(20)NULL, --唯一性字段(列名) only_valu…

java開發計算機考試服務器_2011計算機二級JAVA編程:取得服務器當前的各種具體時間...

取得服務器當前的各種具體時間/*** 取得服務器當前的各種具體時間* 回車:日期時間*/import java.util.*;public class GetNowDate{Calendar calendar null;public GetNowDate(){calendar Calendar.getInstance();calendar.setTime(new Date());}public int getYea…

(cljs/run-at (JSVM. :all) 細說函數)

前言 作為一門函數式編程語言,深入了解函數的定義和使用自然是十分重要的事情,下面我們一起來學習吧! 3種基礎定義方法 defn 定義語法 (defn name [params*]exprs*) 示例 (defn tap [ns x](println ns x)x) fn 定義語法 (fn name? [params*]…

Request的getHeader()和getParameter()的區別

區別是:一個是獲得HTTP頭信息,一個是獲得表單參數值。轉載于:https://www.cnblogs.com/pxffly/p/7460514.html

gcc中的內嵌匯編語言(Intel i386平臺)

gcc中的內嵌匯編語言(Inteli386平臺) 一.聲明 雖然Linux的核心代碼大部分是用C語言編寫的,但是不可避免的其中還是有一部分是用匯編語言寫成的。有些匯編語言代碼是直接寫在匯編源程序中的,特別是Linux的啟動代碼部分&#xff1b…

數據庫學習,樹形結構的數據庫表Schema設計方案

2019獨角獸企業重金招聘Python工程師標準>>> 程序設計過程中,我們常常用樹形結構來表征某些數據的關聯關系,如企業上下級部門、欄目結構、商品分類等等,通常而言,這些樹狀結構需要借助于數據庫完成持久化。然而目前的各…

[轉載] 手工制作Win7 OEM版

只要往微軟MSDN原版ISO的sources目錄加個“$OEM$”文件夾,再刪除sources下面的ei.cfg文件就可以了。 來源:http://zxkh19501.blog.163.com/blog/static/1237851792010629113427594/轉載于:https://www.cnblogs.com/784040932/p/win7oem.html

mysql dbo_mysql-雙重分組

我的表有兩列:名稱和等級.看起來像這樣:NAME | GRADEAdam | 1Adam | 2Adam | 2Adam | 3Frank | 2Frank | 1現在,我想創建如下所示的視圖:NAME | GRADE 1 | GRADE 2 | GRADE 3Adam | 1 | 2 | 1Frank | 1 | 1 | 0我寫了這個:SELECT …

課堂作業整理三 (集合:list接口)

集合中 list的方法列表(Arraylist和Linkedlist) 方法名功能說明ArrayList()構造方法,用于創建一個空的數組列表add(E,e)將指定的元素添加到此列表的尾部get(int index)返回此列表中指…

LINUX系統移植(史上最全最細,強烈推薦)

Linux系統移植 目 錄 第一部分 前言...................................................................................................................................8 1 硬件環境................................................................................…

The serializable class XXX does not declare a static final serialVersionUID field of type long的警告...

原文: http://blog.csdn.net/ultrakang/article/details/41820543轉載于:https://www.cnblogs.com/Baronboy/p/7465508.html

Ubuntu17.04 之 systemd 設置開機啟動

Ubuntu從16.04開始不再使用 initd 管理系統,改用 systemd。 和 Centos 一樣,升級到 Centos7 之后使用 systemd 替代 init.d 為了像以前一樣,在/etc/rc.local中設置開機啟動程序,需要以下幾步: 1、鏈接文件 systemd 默…

replaceselection();java'_Java JTextComponent.replaceSelection方法代碼示例

import javax.swing.text.JTextComponent; //導入方法依賴的package包/類public void actionPerformed(final ActionEvent evt, final JTextComponent target) {if (target ! null) {if (!target.isEditable() || !target.isEnabled()) {target.getToolkit().beep();return;}Ed…

Systemd 入門教程之命令篇

Systemd 是 Linux 系統工具,用來啟動守護進程,已成為大多數發行版的標準配置。 本文介紹它的基本用法,分為上下兩篇。今天介紹它的主要命令,下一篇介紹如何用于實戰。 一、由來 歷史上,Linux 的啟動一直采用init進程。…

GCC生成的匯編代碼

假設我們寫了一個C代碼文件 code.c包含下面代碼: int accum 0; int sum(int x, int y) { int t x y; accum t; return t; } 這是用echo命令輸入源碼的效果,簡單的就是最好的:)一、查看GCC生成的匯編代碼在命令行…

php __FILE__,__CLASS__等魔術變量,及實例

php __FILE__,__CLASS__等魔術變量,及實例 今天看到一個魔術變量,是以前沒見過的,__DIR__,我查了查,發現原來是php5.3新增的,順便舉幾個例子,解釋一下php的魔術變量 1,__FILE__ 文件的完整路徑和…