当前位置: 代码迷 >> J2SE >> 关于命令行编译java文件和执行class文件的配置有关问题
  详细解决方案

关于命令行编译java文件和执行class文件的配置有关问题

热度:84   发布时间:2016-04-23 19:51:34.0
关于命令行编译java文件和执行class文件的配置问题
各位朋友有个问题,求解答:
有个文件 xTest.java 
代码如下:
import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.AbstractHttpClient;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class xTest {
    
public static void main(String []args) throws ClientProtocolException, IOException{
        
    
     HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet("http://www.baidu.com");
        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        String html = EntityUtils.toString(entity, "GBK");

        httpget.releaseConnection();
 
        System.out.println(html);
 }
}

eclipse编译执行都没有问题;

我突然想用命令行来编译执行,编译javac xTest.java报错  找不到软件包;

于是我只好带包路径编译 javac -cp XXXXXXXXXXXXXXXXXXXX(中间省略无数字) xTest.java ,好了编译好了;

执行java xTest 又报错NoClassDefFoundError,又坑爹的带包路径执行了下java -cp XXXXXXXXXXXXXXXXXXXX(中间省略无数字) xTest,正确执行;

该死的httpClient的jar名字很长啊,如果要再来个mysql什么的jar的话,敲名字都要敲个半死。

我想找个简单一点的编译执行方式:

外部包在我硬盘上的路径:D:\tools\otherlib;

我也试过配置classpath,貌似不行:

我的电脑的目前 环境变量
classpath:  .;%java_home%\lib;%java_home%\lib\dt.jar;%java_home%\lib\tools.jar;D:\tools\otherlib;
java_home:  D:\Java\jdk1.6.0_45
Path:  %java_home%\bin;D:\Java\jre6\bin;

各位朋友帮忙看看,有啥办法没有,我就想达到,用javac xTest.java可编译,java xTest 可执行,这个目的
------解决思路----------------------
引用:
Quote: 引用:

这个, 其实配置.classpath应该是可以的, 
这里给楼主提供几种方法, 
1, 把所有的依赖的包都放进 %JAVA_HOME%\jre\lib\ext 目录下, 编译和运行的时候就不需要指定 -cp选项了, 不过这不是一个好习惯, 因为,所有的java程序的编译和运行, 都会自动扫描该路径下的文件,
2, 编译时直接写, 运行时按上箭头, 然后把编译时的命令行修改, 直接运行, 在运行, 直接上箭头, 回车....
3, 使用makefile, 虽然lz使用的windows,不过也是有  MinGW或者CygWin 之类的支持makefile的

我主要是纳闷,我明明在classpath里头配了外部包的路径了,为什么javac 的时候还会报错。。。

额, 我说几种情况吧, 
1, 配置过classpath后, 要重新打开一个新的命令行窗口
2, 配置的classpath应该是jar文件的路径, 比如 G:\java\test.jar, 而不是G:\java\*.jar, 也不是 G:\java (虽然我觉得应该可以, 但是,试验证明, 就是不可以)
3, 如果lz的操作系统是win8, 不要使用文件管理器-->文件-->打开命令提示符, 虽然我也不知道怎么回事, 但是这样打开的命令行并没有设置classpath

 最后, 判断你的classpath是否设置成功的方法是,在命令行中输入:
 

echo %classpath%

如果输出中, 有lz需要的jar的路径, 且与相邻的其他jar路径之间有分号, 那就说明配置成功, 否则说明某个地方错误
------解决思路----------------------
有几个比较好的轮子,不要再造轮子了
ant,maven 
一个文件编译执行都这么费劲,那规模系统的编译部署,估计要死人了啊~

------解决思路----------------------
放在java 的 ext 目录下是可以的,不过我在工作中遇到过这样的问题
situation 如下:
一个工程师部署了一个项目,他觉得ojdbc1.5 不好,给换成了1.6 的
结果导致我的所有的程序全部挂掉
所以建议还是不要存在ext 里面,还是放在自己工程的lib 目录下面吧
  相关解决方案