博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
命令行下Java的编译及运行(2)
阅读量:4121 次
发布时间:2019-05-25

本文共 2495 字,大约阅读时间需要 8 分钟。

中说明了如何通过命令编译及运行自己的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的人查看。

  附件: 

转自:

转载地址:http://osspi.baihongyu.com/

你可能感兴趣的文章
微服务的注册与发现
查看>>
bash: service: command not found
查看>>
linux Crontab 使用 --定时任务
查看>>
shell编程----目录操作(文件夹)
查看>>
机器学习-----K近邻算法
查看>>
HBASE安装和简单测试
查看>>
关于程序员的59条搞笑但却真实无比的编程语录
查看>>
搞笑--一篇有趣的文章编译自一篇西班牙博客。有一位美丽的公主,被关押在一个城堡中最高的塔上,一条凶恶的巨龙看守着她,需要有一位勇士营救她…
查看>>
非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)
查看>>
Tomcat启动错误,端口占用
查看>>
laravel 修改api返回默认的异常处理
查看>>
高德坐标转换百度坐标 javascript
查看>>
tp5封装通用的修改某列值
查看>>
laravel控制器与模型名称不统一
查看>>
vue登录拦截
查看>>
npm配置淘宝镜像仓库以及electron镜像
查看>>
linux设置开机自启动脚本的最佳方式
查看>>
VUE SPA 单页面应用 微信oauth网页授权
查看>>
phpstorm 集成 xdebug 进行调试
查看>>
npm和node升级的正确方式
查看>>