创建相关目录结构
mkdir -p build/classes build/jar src/oata
vim src/oata/MyHelloWorld.java
package oata;
public class MyHelloWorld {
public MyHelloWorld(String str) {
System.out.println("MyHelloWorld " + str);
}
}
vim src/oata/HelloWorld.java
package oata;
import oata.MyHelloWorld;
public class HelloWorld{
public static void main(String[] args){
MyHelloWorld my = new MyHelloWorld("123\n");
}
}
#编译java文件,-d为class文件输出目录
javac -d build/classes/ src/oata/HelloWorld.java src/oata/MyHelloWorld.java
(对于有多个java源文件需要编译,可以把java源文件列表写入一个文本文件,比如src.txt,然后javac编译的时候传入 @src.txt文件列表)
#执行编译好的class文件,-cp为-classpath class文件目录,oata为package包名
java -cp build/classes/ oata.HelloWorld
#如果程序执行需要依赖其他jar包的,可以指定jar包
java -cp build/classes/:path-to-jar.jar oata.HelloWorld
java -cp build/classes/:path-to-jar/* oata.HelloWorld
#打包成jar文件,先构造manifest文件,制定Main-Class入口是oata.HellWorld
echo "Main-Class:oata.HelloWorld" > myManifest
#打包jar文件
jar -cfm ./build/jar/HelloWorld.jar myManifest -C build/classes/ .
java -jar build/jar/HelloWorld.jar
#最后整个目录的结构如下
[root@xxx java]# tree
.
|-- build
| |-- classes
| | `-- oata
| | |-- HelloWorld.class
| | `-- MyHelloWorld.class
| `-- jar
| `-- HelloWorld.jar
|-- myManifest
`-- src
`-- oata
|-- HelloWorld.java
`-- MyHelloWorld.java
6 directories, 6 files
#分割线,下面是编译hadoop,hbase相关java测试程序
-------------------------------------------------------------------------------------------------------------------------------------
export HBASE_CONF_DIR=/usr/local/hbase-0.98.4-hadoop2/conf
export HADOOP_CONF_DIR=/usr/local/hadoop-2.4.0/etc/hadoop
#编译java文件
javac -cp $HBASE_HOME/*:$HBASE_HOME/lib/* Test.java
#执行代码
java -cp .:$HBASE_HOME/*:$HBASE_HOME/lib/* Test
#打包成jar文件
#jar文件运行的时候不像运行class那样可以通过-cp制定第三方库路径,需要通过MANIFEST.MF文件,把MANIFEST.MF文件打包进jar里面
编辑MANIFEST.MF文件内容如下:
Manifest-Version: 1.0
Main-Class: Test
Class-Path: /usr/local/hbase-0.98.4-hadoop2/lib/activation-1.1.jar
/usr/local/hbase-0.98.4-hadoop2/lib/activation-1.1.jar
/usr/local/hbase-0.98.4-hadoop2/lib/aopalliance-1.0.jar
/usr/local/hbase-0.98.4-hadoop2/lib/asm-3.1.jar
/usr/local/hbase-0.98.4-hadoop2/lib/avro-1.7.4.jar
......
......
#第三方jar包可以每个一行,每行开头和结尾都需要有一个空格,文件尾部要有2次回车换行
#根据MANIFEST.MF文件内容打包jar
jar cvmf MANIFEST.MF Test.jar Test.class
#执行jar包
#因为MANIFEST.MF文件描述已经在jar包里面,所以运行的时候系统会去找对应的第三方依赖jar包
java -jar Test.jar