今天看到有一个利用原始的javac编译整个Java项目的专栏,然后就动手对使用javac来编译java工程进行了一下研究,一直都是使用IDE来搞java,对这些编译工程的细节还不是很了解,遂纪录之。
工程目录结构如下:
App.java的内容如下:
package com.oops;
public class App {
public static void main(String[] args) {
Orz orz = new Orz();
orz.sayOops();
orz.sayOrz();
}
}
Orz.java的内容如下:
package com.oops;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Orz {
Logger LOGGER = LogManager.getLogger();
public void sayOrz() {
LOGGER.info("orz...");
}
public void sayOops() {
LOGGER.info("orz...");
}
}
这个项目引入了两个外部的jar包。
构建如下:
- 首先创建一个目录用于存放生成的class文件。
- 进入工程目录,然后运行编译命令,其中-d 参数指定编译结果的输出目录,-cp参数用于指定搜索引入外部包的路径,最后是需要编译的文件。
javac -d classes -cp lib\\core.jar;lib\\api.jar src\\com\\oops\\*.java
- 进入classes目录,运行生成的class文件。注意,运行class文件时需要注意输入class的全限定名。如我们这里生成了一个叫做App.class的类文件,由于我们的
App.java
是在com.oops
包下面的,所以运行的时候我们应该运行com.oops.App
,同时还需要指定classpath。
java -cp .;..\\lib\\api.jar;..\\lib\\core.jar com.oops.App
- 在工程目录下面新建一个MANIFEST.MF文件。指定入口类,classpath。
Manifest-Version: 1.0
Main-Class: com.oops.App
Class-Path: lib/api.jar lib/core.jar
- 进入classes目录,打包jar文件。
jar -cvfm demo.jar ..\\MANIFEST.MF *
- 在classes目录下面,运行jar包。
java -jar demo.jar
- 接下来需要学习一下使用ant和maven等构建工具了。