針對多人協作、多環境(開發/測試/生產)部署痛點,利用 Ant 屬性文件隔離差異、Eclipse 強大編輯器提效,構建「一次編譯、多環境打包」的標準化流水線。
build.xml # 編譯階段:CVS 檢出、編譯、產出基準 WAR
deploy.xml # 部署階段:解壓 WAR → 環境屬性替換 → 條件刪除 → 重打包
deploy.properties # 當前目標環境屬性(由三環境模板複製而來)
develop_deploy.properties
test_deploy.properties
product_deploy.properties
Ctrl+Click 跳轉 target/property 定義Alt+Shift+R 重構屬性/目標名稱(全工程同步)<property file="deploy.properties"/> <!-- 統一入口 -->
<!-- deploy.properties 內容示例 -->
log4j.appender.FILE.File=/var/log/app.log
datasource.url=jdbc:mysql://prod-db:3306/app
deploy.isTestEnv=false
<filter filtersfile="deploy_env.properties"/>
<copy todir="${unpack.dir}" filtering="true">
<fileset dir="${unpack.dir}"/>
</copy>
deploy_env.properties:
@log4j.path@=/var/log/app.log
@db.url@=jdbc:mysql://prod-db:3306/app
源文件中寫 @log4j.path@,複製時自動替換。
<replaceregexp byline="false">
<regexp pattern="<param-name>log4j.path</param-name>\s*<param-value>.*?</param-value>"/>
<substitution expression="<param-name>log4j.path</param-name><param-value>${log4j.path}</param-value>"/>
<fileset dir="${unpack.dir}/WEB-INF" includes="web.xml"/>
</replaceregexp>
<target name="checkEnv">
<condition property="isTestEnv">
<istrue value="${deploy.isTestEnv}"/>
</condition>
<antcall target="removeTestCode"/>
<antcall target="keepTestCode"/>
</target>
<target name="removeTestCode" if="isTestEnv"> <!-- 刪除測試 Servlet/頁面 --> </target>
<target name="keepTestCode" unless="isTestEnv"> <!-- 生產環境保留 --> </target>
<cvs cvsRoot="${cvs.root}" package="${cvs.project}" tag="${cvs.tag}" dest="${src.dir}" failonerror="true"/>
需將 cvs.exe 加入系統 PATH。
<unzip src="${base.war}" dest="${unpack.dir}"/>
<war destfile="${target.dir}/app.war" basedir="${unpack.dir}"
webxml="${unpack.dir}/WEB-INF/web.xml"
manifest="${unpack.dir}/META-INF/MANIFEST.MF"/>
build.xml 產出基準 WARdeploy.properties → 運行 deploy.xmlant -f deploy.xml 或 Eclipse 右鍵 Run As → Ant Build配套完整 build.xml、deploy.xml、屬性模板源碼已整理,可直接落地專案。