JSP在使用ANT创建的战争是没有得到复制 [英] JSP is not getting copied while creating war using ANT

查看:144
本文介绍了JSP在使用ANT创建的战争是没有得到复制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用以下ANT脚本来创建简单的Web应用程序的战争。

 <?XML版本=1.0编码=UTF-8&GT?;
<项目名称=MyProject的默认为战争>
    &所述;路径ID =compile.classpath>
        <文件集DIR =的WebContent / WEB-INF / lib目录>
            <包括姓名=*罐子。/>
        < /文件集>
    < /路径>
    <目标名称=编译>
        < javac的DESTDIR =的WebContent / WEB-INF / classes中调试=真SRCDIR =SRC>
            <类路径REFID =compile.classpath/>
        < / javac的>
    < /目标与GT;
    <目标名称=战争依赖=编译>
        <战争destfile =建立/ myproject.warwebxml =的WebContent / WEB-INF / web.xml文件>
            <文件集DIR =的WebContent>
                <** / * JSP包括姓名= />
            < /文件集>
            < lib目录=的WebContent / WEB-INF / lib目录/>
            <类DIR =的WebContent / WEB-INF / classes中/>
        < /战争>
    < /目标与GT;
< /项目>

这是创造了战争,但是当我打开了战争,它不包含由于该应用程序没有运行JSP文件。任何想法有什么不好?
另外,现在我手动在weblogic应对战争。是否有任何ANT命令,它可以部署战争吗?
谢谢你。


解决方案

我不知道确切的答案,但这里是我使用ANT的build.xml的Web应用程序的方式。试一试。这工作在Eclipse中或从命令行运行。几个关键点是:


  • 的build.xml有参考编译时库,包括servlet的api.jar文件

  • 动态META-INF / MANIFEST.MF

  • 为编译,罐子和战争任务
  • 独立的目标,让每个项目的自定义规则更容易

  • web应用程序的战争没有单独的.class文件,但编译WEB-INF / lib中/ mywebapp.jar库,以尽量减少文件系统杂讯

  • 您可以创建web / WEB-INF /类/文件夹,并把一些属性文件或极端情况下二元提供类文件。他们把war包内与其他JSP,HTML,JS文件一起。

  • 文件夹结构非常精简,我可以在开发过程中使用mywebapp /网页/文件夹直接在Tomcat服务。每个HTML,JSP等的变化是在运行时反映出来。编译罐子触发Tomcat的重新加载web应用实例。

使用的webapp项目这个共同的文件夹结构。结果
/mywebapp/ant.bat结果
/mywebapp/build.xml结果
/ mywebapp /班/结果
/ mywebapp / src目录/结果
/mywebapp/src/META-INF/MANIFEST.MF结果
/ mywebapp / lib目录/结果
/ mywebapp / WEB /结果
/mywebapp/web/WEB-INF/web.xml结果
/ mywebapp / WEB / WEB-INF / lib目录/结果
/mywebapp/web/META-INF/context.xml

mywebapp / build.xml文件


 <?XML版本=1.0编码=UTF-8&GT?;
<项目名称=mywebapp默认为构建BASEDIR =&gt的帮助。
  <属性名=名字值=$ {} ant.project.name/>
  <属性名=类值=./班/>
  <属性名=SRCVALUE =./ SRC/>
  <属性名=WEBDIRVALUE =./网/>
  <属性名=版本值=1.0/>  <物业环境=ENV/>  &所述;路径ID =库>
      < pathelement位置=LIB / servlet的api.jar文件/>
      < pathelement位置=网页/ WEB-INF / lib目录/ somelib1.jar/>
      < pathelement位置=网页/ WEB-INF / lib目录/ somelib2.jar/>
      < pathelement位置=网页/ WEB-INF / lib目录/ GSON-2.2.4.jar/>
  < /路径>  <&TSTAMP GT;
     <格式属性=TODAY模式=YYYY-MM-DD HH:MM:SS/>
  < / TSTAMP>
  <目标名称=updatemanifest描述=更新清单>
     < buildnumber文件=build.num/>     <拷贝文件=$ {} SRC /META-INF/MANIFEST.MF
        todir =$ {}类/ META-INF /覆盖=真preservelastmodified =真
     />     <清单文件=$ {}类/META-INF/MANIFEST.MF模式=更新>
        <属性名=实施-版本值=$ {版本} $ {} build.number($ {} TODAY)/>
        <属性名=实施-标题值=$ {}名/>
     < /清单>
  < /目标与GT;  <目标名称=干净描述=干净编译的类>
      <删除DIR =$ {}班/>
  < /目标与GT;  <目标名称=编译取决于=干净描述=编译类>
      < MKDIR DIR =$ {}班/>
      < javac的SRCDIR =$ {src}字符串DESTDIR =$ {}类目标=1.6来源=1.6编码=ISO-8859-1
          调试=真DEBUGLEVEL =行,源
          不包括=includeantruntime =false的>
          <类路径REFID =库/>
          < compilerarg值= - Xlint:德precation/>
      < / javac的>
  < /目标与GT;  <目标名称=罐子取决于=updatemanifest描述=创建一个.jar文件>
      <回声消息=构建版本:$ {}发布/>
      <罐子
          清单=$ {}类/META-INF/MANIFEST.MF
          jar文件=$ {} WEBDIR / WEB-INF / lib中/ $(名称)的.jar>
         <文件集DIR =$ {}班>
         < /文件集>
      < /瓶>
  < /目标与GT;  <目标名称=战争依赖=编译,罐子描述=创建一个.war文件>
      <删除文件=$ {name}的的.war/>
      <拉链destfile =$ {name}的的.war
          BASEDIR =$ {} WEBDIR
          排除=
              ** / CVS *
              
      />
  < /目标与GT;  <目标名称=建造取决于=战争描述=建设lib目录>
  < /目标与GT;< /项目>


的src / META-INF / MANIFEST.MF


  

实施-标题:myappname结果
  实现版本:1.0.0(2010-03-01)结果
  实现供应商:我的名字有限公司结果
  实现网址: http://www.myname.com


mywebapp /的build.bat


  

调用C:\\ Apache的ANT-1.7.0 \\ BIN \\ ant.bat构建结果
  暂停


构建脚本创建WEB-INF / lib目录/ mywebapp.jar内war包和MANIFEST.MF更新为具有版本号,名称和版本。非常方便,你可以使用文件夹中的内容作为新的Web应用程序项目的模板。只要编辑的build.xml有新的项目名称。

一些编译时依赖点mywebapp / WEB-INF / lib文件夹。非战争打包库投入mywebapp / lib目录/文件夹只编译时间。我喜欢保持项目版本控制中的每个依赖性,因此多数民众赞成此lib文件夹的原因。您可以使用的* .jar通配符蚂蚁语法,但我显式地列出了自我文档的目的每个文件。

下面是在Tomcat中在开发时使用奖金的文件。它出版在Tomcat Web应用程序和项目文件夹中的任何更改将立即看出,其非常方便的客户端文件更改(HTML,JS,JSP)。


  • 这个文件是从mywebapp / WEB / META-INF / context.xml文件,但增加了一个明确的docBase属性copypaste。

  • 它指示Tomcat能够直接从项目文件夹使用的文件,没有在运行时需要重新部署

  • 启动tomcat并保持运行,则可能运行几个web应用项目withing同一Tomcat实例。有时,更大的发展项目需要它。

  • 远程调试挂钩需要这里不包括一些Java魔术

的tomcat / conf目录/卡塔利娜/本地主机/ mywebapp.xml

 <?XML版本=1.0编码=UTF-8&GT?;
<上下文的docBase =C:/ mywebapp / WEB
    调试=0重载=真crossContext =真><! -
  <阀门的className =org.apache.catalina.valves.RemoteAddrValve
    允许=127.0.0.1/>
- ><! -
   <阀门的className =org.apache.catalina.valves.RequestDumperValve/>
- >  其中p;! - 汇集数据库连接 - >
    <资源名称=的jdbc / mywebappDBAUTH =容器TYPE =javax.sql.DataSource中的
        maxActive =10了maxidle =2MAXWAIT =20000
        driverClassName =com.microsoft.sqlserver.jdbc.SQLServerDriver
        用户名=的myuserid密码=MYPWD
        URL =的jdbc:SQLSERVER://mysqlserv1.com:1433;数据库名称= MYDB;的applicationName = mywebapp
        validationQuery =SELECT 1
    />
    <! - < ResourceLink名=的jdbc / mywebappDB全球=JDBC / mywebappDBTYPE =javax.sql.DataSource中的/> - >
    <资源名称=的jdbc / mywebappDB2AUTH =容器TYPE =javax.sql.DataSource中的
        maxActive =100了maxidle =20MAXWAIT =10000
        driverClassName =com.mysql.jdbc.Driver
        用户名=的myuserid密码=MYPWD
        URL =的jdbc:mysql的://本地主机:3306 / MYDB2 useUni code =真放大器;放大器;的characterEncoding = UTF8
        validationQuery =SELECT 1removeAbandoned =真removeAbandonedTimeout =300
      />< /语境GT;

PS:ANT构建系统是好的,不管有些人可能会说些什么。同它一起请你。

I am using following ANT script to create a war of simple web application.

<?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>

It's creating the war but when I am opening the war, it's not containing JSP files due to which application is not running. Any idea what is wrong? Also, right now I am coping war manually in weblogic. Is there any ANT command which can deploy war? Thanks.

解决方案

I don't know exact answer but here is my way of using ANT build.xml for webapps. Give it a try. This works inside Eclipse or run from the commandline. Few key points are:

  • build.xml has reference to compile-time libraries, including servlet-api.jar
  • dynamic META-INF/MANIFEST.MF
  • separate targets for compile, jar and war tasks to allow easier per project custom rules
  • webapp war don't have individual .class files but compiled web-inf/lib/mywebapp.jar library to minimize filesystem noice
  • you may create web/WEB-INF/classes/ folder and put some .properties file or extreme case "binary provided" class files. They are put inside war package along with other jsp,html,js files.
  • folder structure is very streamlined, I can use mywebapp/web/ folder directly in Tomcat service during development. Each html, jsp etc changes are reflected at runtime. Compiling jar triggers Tomcat to reload webapp instance.

Use this common folder structure for webapp project.
/mywebapp/ant.bat
/mywebapp/build.xml
/mywebapp/classes/
/mywebapp/src/
/mywebapp/src/META-INF/MANIFEST.MF
/mywebapp/lib/
/mywebapp/web/
/mywebapp/web/WEB-INF/web.xml
/mywebapp/web/WEB-INF/lib/
/mywebapp/web/META-INF/context.xml

mywebapp/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

Build script creates war package and manifest.mf within web-inf/lib/mywebapp.jar is updated to have build number, title and version. Very handy you can use folder content as a template for new webapp projects. Just edit build.xml to have new project name.

Some compile-time dependencies point mywebapp/web-inf/lib folder. Non war-packaged libraries are put to mywebapp/lib/ folder for compile time only. I like keeping each dependency within project version control so thats a reason for this lib folder. You may use *.jar wildcard ant syntax but I explictly list each file for self documentation purpose.

Here is a bonus file to be used in Tomcat during development time. It publishes webapp on Tomcat and any changes in project folder is seen immediately, its very handy for client file changes (html,js,jsp).

  • this file is a copypaste from mywebapp/web/META-INF/context.xml file but an explicit docBase attribute is added.
  • It directs Tomcat to use files directly from project folder, no redeployment needed at runtime
  • Start tomcat and keep it running, you may run several webapp projects withing same Tomcat instance. Sometimes bigger development projects need it.
  • Remote debugging hook requires some java magic not included here

tomcat/conf/Catalina/localhost/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 build system is fine no matter what some people may say. Go with it as you please.

这篇关于JSP在使用ANT创建的战争是没有得到复制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆