java批量编译_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
{
eclipse怎么打开已有的java文件
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!")
通过这篇⽂章,我们已经了解了Java项⽬的管理⽅法,以及编译、打包、运⾏的命令⾏,最后介绍了使⽤脚本⽂件有效管理项⽬。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论