[Debug]Windows下命令行编译java程序,文件组织/问题/解决

    问题描述:想了解下java程序的具体的编辑到运行的过程,于是花了点时间写了个简单的HelloWorld测试了下,Win7的OS,非linux下。内容包括手动建立工程文件的目录,用notepad编辑一个HelloWorld类源程序,使用javac将源程序转为字节码格式的.class文件,最后使用java执行程序输出"HelloWorld!"。
    该过程中出现的问题就是用java执行时出现了
“Exception in thread "main"java.lang.NoClassDefFoundError:”的错误。对该问题进行了测试并做了解决。
    工程文件的建立:参考了Android源代码工程文件的组织,建立的工程文件目录如下:
FileComposePrj
|--libs
|--res
|--src
  |--com
     |--ethan
       |--compose_test
          |--HelloWorld.java
|--bin
  |--res
  |--classes
    这个工程名字取做“FileComposePrj”,libs用于放置.jar文件(相当于库文件),res文件夹放置图片,.xml文档等资源文件,src文件夹下放置源代码,都是.java文件,最后bin文件夹里放javac过后的.class文件。这个组织结构是参考的Android工程的。
    然后在src文件夹下根据自己的需要陆续新建了一列文件夹,最后是.java源代码文件,
packagecom.ethan.compose_test;

//一个public类,含有main方法,打印HelloWorld!
public class HelloWorld {
   public static void main(String[] args) {
       System.out.println("HelloWorld!");
   }
}
   编译程序:应该是叫做解释吧,将.java文件解释成字节码.class文件,使用javac命令:
从cmd中用cd命令切换到FileComposePrj目录下,然后
javac -d bin\classessrc\com\ethan\compose_test\HelloWorld.java

    在bin\classes下会根据 packagecom.ethan.compose_test;自动创建对应的文件夹和.class文件:
[Debug]Windows下命令行编译java程序,文件组织/问题/解决_第1张图片
    执行程序:使用
javabin\classes\com\ethan\compose_test\HelloWorld
    结果出现问题了
[Debug]Windows下命令行编译java程序,文件组织/问题/解决_第2张图片
    然后查找了一些资料,有说环境变量配置不正确的,也有说代码写错的,这里的问题就是HelloWorld类找不到,于是比较了下自己的程序,因为第一行有个package,因此在使用javac的时候也是自动根据这个包路径来创建类的路径的,bin下到classes文件夹是自己建的,但是com\ethan\compose_test都是自动创建的,于是想着是不是这样出来的class文件不能直接用\来找到呢,于是先
cd bin\classes
切换到classes目录下,然后再
javacom.ethan.compose_test.HelloWorld
就能正确执行了。
[Java]Windows下命令行编译java程序,文件组织/问题/解决
    问题回顾:这次出现的问题就是在源.java文件中使用了包路径packagecom.ethan.compose_test;然后在使用javac的时候会自动创建这个包的路径包含的文件夹的,再然后使用java的时候,就不能直接用com\ethan\compose_test\HelloWorld来找到这个class文件,而是要与包路径的格式一致才行(使用com.ethan.compose_test.HelloWorld)。

你可能感兴趣的:([Debug]Windows下命令行编译java程序,文件组织/问题/解决)