2013-08-27 24 views
1

我正在使用以下Ant腳本來創建一個簡單Web應用程序的戰爭。使用Ant創建戰爭時,JSP不會被複制

<?xml version="1.0" encoding="UTF-8"?> 
<project name="MyProject" default="war"> 
    <path id="compile.classpath"> 
     <fileset dir="WebContent/WEB-INF/lib"> 
      <include name="*.jar" /> 
     </fileset> 
    </path> 
    <target name="compile"> 
     <javac destdir="WebContent/WEB-INF/classes" debug="true" srcdir="src"> 
      <classpath refid="compile.classpath" /> 
     </javac> 
    </target> 
    <target name="war" depends="compile"> 
     <war destfile="build/myproject.war" webxml="WebContent/WEB-INF/web.xml"> 
      <fileset dir="WebContent"> 
       <include name="**/*.jsp" /> 
      </fileset> 
      <lib dir="WebContent/WEB-INF/lib" /> 
      <classes dir="WebContent/WEB-INF/classes" /> 
     </war> 
    </target> 
</project> 

這是創建戰爭,但是當我打開戰爭時,它不包含JSP文件,因爲它沒有運行應用程序。任何想法有什麼不對? 此外,現在我正在Weblogic中手動應對戰爭。有沒有可以部署戰爭的Ant命令?

回答

1

我不知道確切的答案,但這裏是我使用Ant build.xml進行web應用程序的方式。試一試。這在Eclipse內部工作或從命令行運行。幾個關鍵點是:

  • 的build.xml有參考編譯時庫,包括servlet的api.jar文件
  • 動態META-INF/MANIFEST.MF
  • 的編譯,罐子和戰爭獨立的目標任務可以更容易地每個項目的自定義規則
  • webapp的戰爭沒有單獨的.class文件,但編譯WEB-INF/lib目錄/ mywebapp.jar庫,以儘量減少文件系統在降噪
  • 您可以創建網絡/ WEB-INF/classes目錄/文件夾並放置一些.properties文件或極端情況「二進制提供的」類文件。它們與其他jsp,html,js文件一起放入war包中。
  • 文件夾結構非常精簡,我可以在開發過程中直接在Tomcat服務中使用mywebapp/web /文件夾。運行時會反映每個html,jsp等更改。編譯jar觸發器Tomcat重新加載webapp實例。

爲webapp項目使用此公用文件夾結構。
/mywebapp/ant.bat
/mywebapp/build.xml
/mywebapp /類/
/mywebapp/SRC/
/mywebapp/src/META-INF/MANIFEST.MF
/mywebapp/lib中/
/mywebapp /網絡/
/mywebapp/web/WEB-INF/web.xml
/mywebapp /網絡/ WEB-INF/LIB/
/mywebapp/web/META-INF/context.xml

myweb應用程序/ build.xml文件

<?xml version="1.0" encoding="UTF-8"?> 
<project name="mywebapp" default="build" basedir="."> 
    <property name="name" value="${ant.project.name}" /> 
    <property name="classes" value="./classes" /> 
    <property name="src" value="./src" /> 
    <property name="webdir" value="./web" />  
    <property name="version" value="1.0"/> 

    <property environment="env"/> 

    <path id="libs"> 
     <pathelement location="lib/servlet-api.jar" /> 
     <pathelement location="web/WEB-INF/lib/somelib1.jar" /> 
     <pathelement location="web/WEB-INF/lib/somelib2.jar" /> 
     <pathelement location="web/WEB-INF/lib/gson-2.2.4.jar" /> 
    </path> 

    <tstamp> 
     <format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss" /> 
    </tstamp> 


    <target name="updatemanifest" description="Update manifest"> 
     <buildnumber file="build.num"/> 

     <copy file="${src}/META-INF/MANIFEST.MF" 
      todir="${classes}/META-INF/" overwrite="true" preservelastmodified="true" 
     /> 

     <manifest file="${classes}/META-INF/MANIFEST.MF" mode="update"> 
      <attribute name="Implementation-Version" value="${version}.${build.number} (${TODAY})" /> 
      <attribute name="Implementation-Title" value="${name}" />  
     </manifest>  
    </target> 

    <target name="clean" description="Clean compiled classes"> 
     <delete dir="${classes}" /> 
    </target> 

    <target name="compile" depends="clean" description="Compile classes"> 
     <mkdir dir="${classes}"/> 
     <javac srcdir="${src}" destdir="${classes}" target="1.6" source="1.6" encoding="ISO-8859-1" 
      debug="true" debuglevel="lines,source" 
      excludes="" includeantruntime="false" > 
      <classpath refid="libs" /> 
      <compilerarg value="-Xlint:deprecation" /> 
     </javac> 
    </target> 

    <target name="jar" depends="updatemanifest" description="Create a .jar file"> 
     <echo message="Build release: ${release}" />   
     <jar 
      manifest="${classes}/META-INF/MANIFEST.MF" 
      jarfile="${webdir}/WEB-INF/lib/${name}.jar" > 
      <fileset dir="${classes}"> 
      </fileset> 
     </jar> 
    </target> 

    <target name="war" depends="compile,jar" description="Create a .war file"> 
     <delete file="${name}.war" /> 
     <zip destfile="${name}.war" 
      basedir="${webdir}" 
      excludes=" 
       **/CVS* 
       " 
     /> 
    </target> 

    <target name="build" depends="war" description="Build lib"> 
    </target> 

</project> 

的src/META-INF/MANIFEST.MF

Implementation-Title: myappname 
Implementation-Version: 1.0.0 (2010-03-01) 
Implementation-Vendor: My Name Ltd. 
Implementation-URL: http://www.myname.com 

mywebapp /的build.bat

call c:\apache-ant-1.7.0\bin\ant.bat build 
pause 

構建腳本創建war包和web-inf/lib/mywebapp.jar中的manifest.mf更新爲具有內部版本號,標題和版本。非常方便,你可以使用文件夾內容作爲新的webapp項目的模板。只需編輯build.xml即可獲得新的項目名稱。

一些編譯時依賴關係指向mywebapp/web-inf/lib文件夾。只有編譯時纔將非war打包的庫放到mywebapp/lib /文件夾中。我喜歡在項目版本控制中保留每個依賴項,這是lib文件夾的一個原因。您可以使用* .jar通配符ant語法,但爲了自我記錄的目的,我明確列出了每個文件。

這是在開發期間在Tomcat中使用的獎金文件。它在Tomcat上發佈webapp,並立即查看項目文件夾中的任何更改,它非常方便客戶端文件更改(html,js,jsp)。

  • 此文件是mywebapp/web/META-INF/context.xml文件的副本,但添加了顯式的docBase屬性。
  • 它指示Tomcat直接從項目文件夾使用文件,不需要在運行時重新部署
  • 啓動tomcat並保持運行,您可以運行多個具有相同Tomcat實例的webapp項目。有時候更大的開發項目需要它。
  • 遠程調試鉤需要這裏不包括一些Java魔術

的tomcat/conf目錄/卡塔利娜/本地主機/ mywebapp.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Context docBase="C:/mywebapp/web" 
    debug="0" reloadable="true" crossContext="true" > 

<!-- 
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" 
    allow="127.0.0.1" /> 
--> 

<!-- 
    <Valve className="org.apache.catalina.valves.RequestDumperValve"/> 
--> 

    <!-- pooled db connection --> 
    <Resource name="jdbc/mywebappDB" auth="Container" type="javax.sql.DataSource" 
     maxActive="10" maxIdle="2" maxWait="20000" 
     driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
     username="myuserid" password="mypwd" 
     url="jdbc:sqlserver://mysqlserv1.com:1433;DatabaseName=MyDB;applicationName=mywebapp" 
     validationQuery="SELECT 1" 
    /> 
    <!-- <ResourceLink name="jdbc/mywebappDB" global="jdbc/mywebappDB" type="javax.sql.DataSource" /> --> 


    <Resource name="jdbc/mywebappDB2" auth="Container" type="javax.sql.DataSource" 
     maxActive="100" maxIdle="20" maxWait="10000" 
     driverClassName="com.mysql.jdbc.Driver" 
     username="myuserid" password="mypwd" 
     url="jdbc:mysql://localhost:3306/myDB2?useUnicode=true&amp;characterEncoding=utf8" 
     validationQuery="SELECT 1" removeAbandoned="true" removeAbandonedTimeout="300" 
     /> 

</Context> 

PS:Ant構建系統是好的事情什麼沒有一些人們可能會說。隨你隨便去。