用了很久的java,基本都是交給服務器完成的執行,有page之類的入口,或者是在IDE工具中直接 Run As Java Application.
並且一直對安裝java之后配置JAVA_HOME,path,classpath三個環境變量不是很理解。
對於在命令行中如何運行帶包路徑帶jar包依賴的含有main主方法的java類呢?
注:本次操作中class都已經由eclipse編譯生成,故不在此贅述javac命令的使用方法.運行的OS環境為 Win 7.
1.不帶包的HelloWorld
這個是在所有java入門的例子都會使用的。
public class HelloWorld { public static void main(String[] args) { System.out.println("HelloWorld!"); } }
進入命令行,cd至HelloWorld.java編譯后的的HelloWorld.class所處的bin目錄,執行 java HelloWorld
報錯:Exception in thread "main" java.lang.UnsupportedClassVersionError: HelloWorld : Unsupported major.minor version 51.0。
查原因,運行時的java版本過低。
編譯時的java版本為1.7,運行時為1.6.
兩種方法:1.直接改變系統環境變量,JAVA_HOME
2.改變當前運行時的環境變量。
采取第一種就失去了理解命令行的意義了,采取第二種。
在命令行中執行
set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_55
再次執行java HelloWorld,仍然報上述錯誤。
java -version
java版本仍然為1.6
java version "1.6.0_43" Java(TM) SE Runtime Environment (build 1.6.0_43-b01) Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01, mixed mode)
因為在命令行工作台運行的時候,path路徑已經被加載了,所以1.6版本已經生效,我們現在要做的就是是改變了的JAVA_HOME生效
選擇查看當前path內容
echo %path%
得到了一大堆東西,可以看到java運行時的確是1.6
set path=%JAVA_HOME%\bin;%path%
由於只需要改變java運行時,也可以
set path=%JAVA_HOME%\bin;
或者直接改變path不用理會JAVA_HOME
set path=C:\Program Files\Java\jdk1.7.0_55\bin
此時再執行java HelloWorld,得到了想要的
HelloWorld!
或者在某些情況下會出現以下錯誤:錯誤: 找不到或無法加載主類 HelloWorld
說明此時運行時中的classpath出現了某些問題,如上,重新配置當前運行環境的classpath變量即可。
set classpath=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
2.運行帶包的HelloWorld.
package com.test; public class HelloWorld { public static void main(String[] args) { System.out.println("HelloWorld!"); } }
在命令行控制台中進入com包的父目錄,也就是bin目錄,執行
java com.test.HelloWorld
得到結果
HelloWorld!
3.運行導入了jar包的方法
public class SpiderTest { public static void main(String[] args) { System.out.println(" 測試開始! "); // TODO Auto-generated method stub SpiderPic sp = new SpiderPic(); sp.initializeUrlList(); String url = "http://www.25meinv.com/qingchun/"; for (int i=1538; i>1537; i--){ String htmlUrl = url +i; SpiderPic.spider(htmlUrl); } for(String s:SpiderPic.urlList){ System.out.println(" 測試結束 "+ s); } } }
SpiderPic方法里導入了HttpClient包
import java.io.InputStream; import org.apache.http.client.config.CookieSpecs; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.HashSet; public class SpiderPic { //TODO 具體實現方法,略 }
運行
java SpiderTest
異常:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest
有多種解決方式:
a.設置classpath.
set classpath=%classpath%;D:\workspace\eclipse\jiandan_image_spider\lib\commons-logging-1.2.jar;D:\workspace\eclipse\jiandan_image_spider\lib\httpclient-4.4.jar;D:\workspace\eclipse\jiandan_image_spider\lib\httpclient-cache-4.4.jar;D:\workspace\eclipse\jiandan_image_spider\lib\httpclient-win-4.4.jar;D:\workspace\eclipse\jiandan_image_spider\lib\httpcore-4.4.jar;D:\workspace\eclipse\jiandan_image_spider\lib\httpmime-4.4.jar;
再次執行
java SpiderTest
得到想要的結果。
b.在執行java 命令時加入 -classpath,也可以寫作 -cp
參考:http://www.cnblogs.com/people/archive/2013/07/07/3176761.html
c.要設置一大堆jar太繁瑣,可以設置路徑依賴。
java -Djava.ext.dirs=D:\workspace\eclipse\jiandan_image_spider\lib SpiderTest
或者使用相對路徑,lib目錄與bin目錄同級。
java -Djava.ext.dirs=../lib com.test.SpiderTest
得到想要的結果。
