问题描述
最近发现eclipse下编译的class文件和linux平台下面编译的class文件大小不一样。究其原因,是因为eclipse编译的时候应该自动带-g选项而且不带-O选项,即类增加了编译信息而又没有做编译优化。于是,想在linux下面写一个程序编译java文件,不想用ant,希望用javac简单点。
问题解决
web项目的java文件往往不止一个,一个一个的列举不现实,因此,可以用find命令生成一个list。
properties等配置文件需要一并拷贝到目标文件夹。
应该选用-O选项来编译,希望能够减少启动时间。
于是,脚本来了:
#!/bin/sh
TARGET_DIR=~/tmp/target/
SRC_DIR=~/tmp/src/main/java/
RESOURCE_DIR=~/tmp/src/main/resource/
LIB_PATH="."
LIB_DIR=[对应你的项目的lib的路径,我们这里是weblogic的lib文件夹]
rm -f ${SRC_DIR}sources.list
find $SRC_DIR -name "*.java" -type f > ${SRC_DIR}sources.list
rm -rf $TARGET_DIR
mkdir ${TARGET_DIR}
for jar_file in `find $LIB_DIR -name "*.jar" -type f`
do
LIB_PATH="${LIB_PATH}:${jar_file}"
done
javac -d $TARGET_DIR -sourcepath ${SRC_DIR} -classpath $LIB_PATH @${SRC_DIR}sources.list
cp -r $RESOURCE_DIR $TARGET_DIR
后记:
javac好像在1.6及以前的版本不支持@java源文件列表的参数形式,这时候,我们可以采用以下命令代替。
find ${SRC_DIR} -name "*.java" -type f | xargs -I {} javac -d $TARGET_DIR -sourcepath ${SRC_DIR} -classpath $LIB_PATH
后记二:
因为Spring涉及到很多annotation的使用,所以,以上方法编译结果有问题。最后还是选用了ant来build项目。
网友评论