在命令行中直接運行帶main方法的java


用了很久的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程序加載指定目錄中的Jar文件

java -Djava.ext.dirs=D:\workspace\eclipse\jiandan_image_spider\lib SpiderTest

或者使用相對路徑,lib目錄與bin目錄同級。

java -Djava.ext.dirs=../lib com.test.SpiderTest

得到想要的結果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM