命令行下Java的编译及运行(2)

上篇博文中说明了如何通过命令编译及运行自己的Java文件。但是当前都是以项目为单位的,如何组织项目中的文件以及对项目的编译运行,是命令行编译主要解决的问题。

  1. 项目组织
  我们以下面的项目作为样例来说明:
Test/
|-- Test.jar
|-- classes
|   |-- Main.class
|   |-- OutterTest.class
|   `-- inner
|       `-- InnerTest.class
|-- run.py
|-- run.sh
`-- src
    |-- Main.java
    |-- OutterTest.java
    `-- inner
        `-- InnerTest.java

  上面是一个项目:Test。其中,有两个文件夹,src用来放置所有的源代码,也就是.java文件;classes用来放置相应的.class文件。Test.jar是最终生成的jar文件,run.py和run.sh是项目的脚本文件。下面列出三个.java文件,只是简单的显示一句话:
// Main.java
import inner.*;
public class Main
{
    public static void main(String[] args)
    {
        System.out.println("main: hello word!");

        OutterTest out1 = new OutterTest();
        out1.hello();

        InnerTest in1 = new InnerTest();
        in1.hello();
    }
}

// OutterTest.java
public class OutterTest
{
        public void hello()
        {
                System.out.println("Hello OutterTest!");
        }
}

// InnerTest.java
package inner;
public class InnerTest
{
        public void hello()
        {
                System.out.println("Hello InnerTest!");
        }
}

  注意上面的InnerTest类,它在package inner中,所以将InnerTest.java放在inner文件夹下,这样可以保证统一。在Eclipse中,新建一个类时,会让你填写package名,然后Eclipse会为你新新建一个相应的文件夹。

  2. 项目编译
  
  javac -d classes src/*.java src/inner/*.java
  
  由上一篇知道,javac中-d表示”指定存放生成的类文件的位置“,也就是将生成的.class文件放在-d指定的文件夹中。需要指出的是,classes文件夹是手动建立的。
  另外,javac还可以批量编译.java文件,上面的命令表示编译src目录下的所以.java文件、编译src/inner目录下的所有.java文件。这样就可以批量编译.java文件,并将生成的.class文件放在classes文件夹中。这里同样要指出一点,因为package inner的关系,会自动建立inner文件夹,并将所有package inner下的类文件.class放在classes/inner下。

  3.项目打包
  
  jar -cvf Test.jar -C classes/ .

  这个命令将会把classes下的所有文件(包括.class和文件夹等)打包为Test.jar文件。
  上篇博客中,介绍了参数-C的意义:-C  更改为指定的目录并包含其中的文件,如果有任何目录文件, 则对其进行递归处理。它相当于使用 cd 命令转指定目录下。
  注意后面的"."的用法,jar可以递归的打包文件夹,"."表示是当前文件夹。如果执行命令“jar -cvf Test.jar .”,表示将当前目录下的所有文件及文件夹打包。所以上面的命令的意思就是“将classes下的所有文件打包为Test.jar”。

  4.项目运行
  
  java -cp Test.jar Main

  通过上面的命令就可以执行Test.jar中的Main.class。其中,cp指定了jar文件的位置。

  5. 脚本文件
  通过上面的几步,我们就可以完成整个项目的编译和运行。而且,通过src和classes两个文件夹将源文件和目标文件分开,使项目比较整洁。但是如果每次编译、运行都要输入上面一系列命令,还是比较繁琐的,尤其当项目文件较多时,这时通过脚本文件管理整个项目是明智的选择。
  下面是项目的脚本文件run.py
import os
import sys

if __name__ == "__main__":

        ProjectJar = "Test.jar"

        if sys.argv[1] == "c":
                print("Compile program.")

                src = "src/*.java src/inner/*.java"
                os.system("javac -d classes " + src)
                os.system("jar -cvf " + ProjectJar + " -C classes/ .")

        if sys.argv[1] == "r":
                print("Run program.")
                os.system("java -cp " + ProjectJar + " Main")

        print("Over!")

  通过这个脚本文件,可以使用"python run.py c"完成项目的编译、打包;使用"python run.py r"运行项目。

  通过这篇文章,我们已经了解了Java项目的管理方法,以及编译、打包、运行的命令行,最后介绍了使用脚本文件有效管理项目。
  附件中包含整个项目,同时还包括一个run.sh,方便不熟悉python的人查看。

  附件: Test.tar

转自:http://www.cppblog.com/jaysoon/archive/2012/09/06/188927.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值