整理一套自己常用的 Java 應用程式專案模板,能大幅節省專案初始化的時間。此模板涵蓋 Windows/Linux 啟動腳本、Log4j 日誌設定與 Ant 建置腳本三大核心組件,開箱即用。
提供 startup.bat (Windows) 與 startup.sh (Linux/Unix) 兩種版本,自動掃描 lib 目錄下所有 JAR 檔並加入 Classpath,最後啟動主類別 com.lavasoft.TestMain。
set APP_LIBDIR=..\lib
setlocal EnableDelayedExpansion
set APP_CLASS_PATH=%XFIRE_HOME%
for %%c in ("%APP_LIBDIR%\*.jar") do set APP_CLASS_PATH=!APP_CLASS_PATH!;%%c
set APP_CLASS_PATH
java -cp %APP_CLASS_PATH% com.lavasoft.TestMain
#!/bin/sh
programdir="."
program="com.lavasoft.TestMain"
num=$#
temp=$CLASSPATH
# setting libs path
libs=../lib/*
append(){
temp=$temp":"$1
}
for file in $libs; do
append $file
done
export CLASSPATH=$temp:.:../:$programdir
export LANG=zh_CN
res=`ps aux|grep java|grep $program|grep -v grep|awk '{print $2}'`
if [ -n "$res" ]
then
echo "TestMain already running"
else
java -classpath $CLASSPATH com.lavasoft.TestMain &
sleep 3
unset res
res=`ps aux|grep java|grep $program|grep -v grep|awk '{print $2}'`
if [ -n "$res" ]
then
echo "TestMain start success"
else
echo "TestMain start error"
fi
fi
同時輸出至 Console 與 Rolling File,單一檔案上限 10MB,最多保留 10 份備份,採用統一時間格式 yyyy-MM-dd HH:mm:ss。
log4j.rootLogger=INFO,CONSOLE,LOGFILE
## CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=INFO
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss } - %-5p %c %x - %m%n
## logfile
log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.LOGFILE.File=testapp.log
log4j.appender.LOGFILE.MaxFileSize=10MB
log4j.appender.LOGFILE.MaxBackupIndex=10
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss } - %-p %c %x - %m%n
定義 clean、compile、jar、all 四個目標,編碼採用 GBK,自動複製 src 目錄下非 Java 原始碼的資源檔 (xml、properties、sh) 至輸出目錄,打包時排除測試類別與設定檔。
<?xml version="1.0" encoding="UTF-8"?>
<project name="testapp" basedir="." default="compile">
<property environment="env"/>
<property name="build.dir" value="./testapp"/>
<property name="classes.dir" value="${build.dir}/bin"/>
<property name="dist.dir" value="./testapp"/>
<path id="classpath">
<fileset dir="./lib">
<include name="*.jar"/>
</fileset>
</path>
<target name="compile" depends="clean">
<mkdir dir="${build.dir}"/>
<mkdir dir="${classes.dir}"/>
<mkdir dir="${build.dir}/lib"/>
<copy toDir="${classes.dir}" failonerror="false">
<fileset dir="./src">
<include name="**/*.*"/>
<exclude name="**/*.java"/>
<exclude name="**/*.log"/>
<exclude name="**/*.iws"/>
<exclude name="**/*.ipr"/>
<exclude name="**/*.iml"/>
</fileset>
</copy>
<copy toDir="${build.dir}/lib" failonerror="false">
<fileset dir="./lib">
</fileset>
</copy>
<javac debug="on"
fork="true"
encoding="GBK"
destdir="${classes.dir}"
srcdir="./src"
extdirs="**/test/**"
classpathref="classpath">
</javac>
</target>
<target name="jar" depends="compile">
<mkdir dir="${dist.dir}"/>
<copy toDir="${dist.dir}" failonerror="false">
<fileset dir="./src">
<include name="*.xml"/>
<include name="*.properties"/>
<include name="*.sh"/>
</fileset>
</copy>
<jar destfile="${dist.dir}/testapp.jar">
<fileset excludes="**/Test*.class,**/*.xml,**/*.properties,**/*.log,**/*.sh" dir="${classes.dir}"/>
</jar>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
<delete dir="${dist.dir}"/>
<delete dir="${build.dir}/lib"/>
</target>
<target name="all" depends="clean,compile,jar"/>
</project>
本文出自「熔 巖」博客,轉載請與作者聯系!
文章來源:https://lavasoft.blog.51cto.com/62575/263548