当前位置:  编程技术>移动开发
本页文章导读:
    ▪Ant+Tomcat自动支配        Ant+Tomcat自动部署 Ant+Tomcat自动部署 今天研究对象是Ant,用于对msms系统进行Tomcat的自动部署。遇到一个怪问题,百思不得其解:通过ant depoly可以把msms.war部署到tomcat上。当然,要求这时候web.........
    ▪ 运用SlidingDrawer的隐藏/显示搜索框        使用SlidingDrawer的隐藏/显示搜索框 局部布局: <LinearLayout android:orientation="horizontal" android:layout_width="250dp" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_alignPa.........
    ▪ wml 实业字符       wml 实体字符 文本替换字符显示效果 说明 实体表达式 实体ASC编码 & &(=and)符号 &amp; &#38;  ’ 单引号 &apos; &#39; > 大于号 &gt; &#62; < 小于号 &lt; &#60; 空格 &am.........

[1]Ant+Tomcat自动支配
    来源: 互联网  发布时间: 2014-02-18
Ant+Tomcat自动部署
Ant+Tomcat自动部署 今天研究对象是Ant,用于对msms系统进行Tomcat的自动部署。

遇到一个怪问题,百思不得其解:
通过ant depoly可以把msms.war部署到tomcat上。当然,要求这时候webapps下面没有msms目录。
看tomcat的纪录,加载msms.war正常,网页也可以打开。

通过ant undeploy,可以把msms卸载。Tomcat显示:
Undeploying context [/msms]
正常卸载了。问题是,去看webapps目录下面,居然有一个msms目录的残骸,里面保留的目录是
WEB-INF\lib
有以下几个文件残留着:
commons-digester.jar
commons-validator.jar
struts.jar

这时候msms目录也无法手工删除,必须停掉tomcat后才能删除。

我装的tomcat是5.5。不知道是否还有人遇到过这种情况,我反正是晕了。

build.properties文件如下:
tomcat.dir=C:/ApacheGroup/Tomcat5.5
tomcat.webapps=C:/ApacheGroup/Tomcat5.5/webapps
tomcat.manager.url=http://localhost:8080/manager
tomcat.manager.username=admin
tomcat.manager.password=xxxxxxxx

build.xml文件如下:
<?xml version="1.0"?>
<project name="msms" default="compile" basedir=".">
    <!-- Ant Tomcat Task Definition -->
    <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask">
        <classpath>
            <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
        </classpath>
    </taskdef>

    <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask">
        <classpath>
            <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
        </classpath>
    </taskdef>

    <taskdef name="install" classname="org.apache.catalina.ant.InstallTask">
        <classpath>
            <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
        </classpath>
    </taskdef>

    <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask">
        <classpath>
            <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
        </classpath>
    </taskdef>

    <taskdef name="list" classname="org.apache.catalina.ant.ListTask">
        <classpath>
            <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
        </classpath>
    </taskdef>

    <taskdef name="start" classname="org.apache.catalina.ant.StartTask">
        <classpath>
            <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
        </classpath>
    </taskdef>

    <taskdef name="stop" classname="org.apache.catalina.ant.StopTask">
        <classpath>
            <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
        </classpath>
    </taskdef>

    <property name="build" value="build" />
    <property name="dist" value="dist" />
    <property name="src" value="src/java" />
    <property name="test" value="src/test" />
    <property name="war-config" value="src/config" />
    <property name="report" value="report" />
    <property name="lib" value="lib" />
    <property name="web" value="web" />
    <property name="meta" value="meta" />
    <property name="context-path" value="${ant.project.name}" />
    <property file="build.properties" />

    <path id="build.classpath">
        <fileset file="${lib}/*.jar" />
        <fileset dir="${tomcat.dir}/common/lib">
            <include name="*.jar" />
        </fileset>
        <fileset dir="${tomcat.dir}/common/endorsed">
            <include name="*.jar" />
        </fileset>
        <pathelement path="${build}" />
    </path>

    <!-- Hibernate Tool Task Definition -->
    <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="/blog_article/build.classpath" />
   
    <target name="clean">
        <echo message="Cleaning up the build and dist directories" />
        <delete dir="${build}" />
        <mkdir dir="${build}" />
        <delete dir="${dist}" />
        <mkdir dir="${dist}" />
    </target>

    <target name="copy-resources">
        <copy todir="${build}">
            <fileset dir="${src}">
                <exclude name="**/*.java" />
                <exclude name="**/*.hbm.xml" />
            </fileset>
        </copy>
    </target>

    <target name="compile" depends="copy-resources">
        <javac destdir="${build}" srcdir="${src}:${test}">
            <classpath refid="build.classpath" />
        </javac>
    </target>

    <target name="initdb" depends="compile">
        <hibernatetool destdir="${build}">
            <classpath>
                <path location="${build}" />
            </classpath>
            <annotationconfiguration configurationfile="src/java/hibernate.cfg.xml" />

            <hbm2ddl create="true" />
        </hibernatetool>
    </target>

    <target name="run" depends="compile">
        <java fork="true" classname="cn.ac.rcpa.msms.tools.ProjectManager" classpathref="/blog_article/build.classpath">
            <classpath path="${build}" />
            <arg value="${action}" />
            <arg value="${project}" />
            <arg value="${description}" />
        </java>
    </target>

    <target name="test" depends="compile" description="run junit test">
        <delete dir="${report}" />
        <mkdir dir="${report}" />
        <junit dir="." fork="true" printsummary="on" haltonfailure="false" failureproperty="tests.failed" showoutput="true">
            <classpath refid="build.classpath" />
            <formatter type="brief" />
            <batchtest todir="${report}">
                <fileset dir="${build}">
                    <include name="**/*Test.*" />
                    <include name="**/Test*.*" />
                </fileset>
            </batchtest>
        </junit>
        <fail if="tests.failed">
      ***********************************************************
      **** One or more tests failed! Check the output ... ****
      ***********************************************************
    </fail>
    </target>

    <target name="create-war" depends="clean, compile" description="build release war">
        <echo message="creation the WAR file...${context-path}.war" />
        <war destfile="${dist}/${context-path}.war" webxml="${meta}/web.xml">
            <classes dir="${build}">
                <exclude name="**/*Test.*" />
                <exclude name="**/Test*.*" />
                <exclude name="hibernate.cfg.xml" />
            </classes>
            <lib dir="${lib}" />
            <fileset dir="${web}" />
            <zipfileset dir="${war-config}" prefix="WEB-INF/classes" />
        </war>
        <!--        <scp file="${dist}/${context-path}.war" todir="root:${password}@172.16.1.20:/usr/local/tomcat/webapps" trust="true" /> -->
    </target>

    <target name="deploy" description="Install application in Tomcat">
        <deploy url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" localWar="file:${dist}/${context-path}.war" />
    </target>

    <target name="undeploy" description="Remove application in Tomcat" if="already.deployed">
        <undeploy url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" />
    </target>

    <target name="reload" description="Reload application in Tomcat">
        <reload url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" />
    </target>

    <target name="start" description="Start Tomcat application">
        <start url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" />
    </target>

    <target name="stop" description="Stop Tomcat application">
        <stop url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" />
    </target>

    <target name="list" description="List Tomcat applications">
        <list url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" />
    </target>

    <target name="deploy-application" description="Compile the web application...">
        <echo message="Undeploying the application only if it's deployed..." />
        <available file="${tomcat.webapps}/${context-path}.war" property="already.deployed" />
        <antcall target="undeploy" />
        <antcall target="create-war" />
        <antcall target="deploy" />
    </target>
</project>


只有Windows上才会有的问题,
创建META-INF目录, 在目录里新建context.xml,加入如下内容

<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true" antiResourceLocking="true">
</Context>

昨天的错误至今无法修正,即使重装了Tomcat也不行。

不过,deploy到两台linux服务器上倒都成功了。
    <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask">
        <classpath>
            <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
        </classpath>
    </taskdef>

    <taskdef name="list" classname="org.apache.catalina.ant.ListTask">
        <classpath>
            <path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
        </classpath>
    </taskdef>

    <target name="deploy-web" description="Install application in Local Tomcat">
        <echo message="deploying to web ..." />
        <deploy url="http://172.16.1.20:8080/manager" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" war="file:${dist}/${context-path}.war" update="true" />
    </target>

    <target name="list-web">
        <echo message="list web tomcat ..." />
        <list url="http://172.16.1.20:8080/manager" username="${tomcat.manager.username}" password="${tomcat.manager.password}" />
    </target>


这里跟昨天的代码有一点不一样:
1、localWar改成了war。
原来更新远程服务器的时候,总是显示更新成功,但是到webapps目录下总是没有相应的war文件,通过调用
ant list-web
发现,有一个context-path是dist/msms,而且是stop状态。哦,原来localWar的意思不是指开发的机器的local path,而是指把这个war被写到服务器的什么地方。改成war就正常了。

2、不需要判断是否已经deploy进而调用undeploy了,直接通过update="true"更新就可以了。

posted on 2006-11-23 08:59 捕风 阅读(4139) 评论(1)  编辑  收藏 所属分类: java高级

<!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> <rdf:Description rdf:about="http://www.blogjava.net/zhhp1314520/articles/ant_tomcat.html" dc:identifier="http://www.blogjava.net/zhhp1314520/articles/ant_tomcat.html" dc:title="Ant+Tomcat自动部署" trackback:ping="http://www.blogjava.net/zhhp1314520/services/trackbacks/82934.aspx" /> </rdf:RDF> -->

<script type="text/javascript"></script>

评论

彻底解决Ant在Tomcat进行卸载部署undeploy时不能删除jar文件的问题

首先有一种解决办法,就是在应用下的META-INF下新建context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true" antiResourceLocking="true" antiJARLocking="true">
</Context>

这种方法在重复进行多次deploy、undeploy时的确解决了该问题。但是如果在deploy和undeploy之间执行如下的webtest任务,也就是在undeploy前访问该应用,那么Tomcat就会加载jar文件,再执行undeploy时还是不能删除jar文件,此时似乎Tomcat植入jar根深蒂固了!
<target name="webtest_login">
<echo message="WebTest测试"/>
<exec executable="cmd">
<arg line="/c webtest.bat -f tools/Java/webtest/login.xml -Dwebtest.home=${tools.webtest}"/>
<arg line="-Dwebtest.home=${tools.webtest}"/>
<arg line="-Dhost=${manager.ip}"/>
<arg line="-Dport=${manager.port}"/>
<arg line="-Dbasepath=${deploy.name}"/>
<arg line="-Dresultpath=${report.webtestReport.part}"/>
<arg line="-Dresultfile=${report.webtestReport.xml.part}"/>
</exec>
<xslt in="${report.webtestReport.xml}" out="${report.webtestReport.html}" />
</target>

有一个办法可以彻底解决该问题,就是使用xml部署文件来部署应用,不适用war发布的方式:
<target name="deploy">
<echo message="安装Web应用"/>
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" classpathref="/blog_article/classpath.catalina"/>
<deploy url="${manager.url}" username="${manager.username}" password="${manager.password}" path="/${deploy.name}" config="D:\AutoBuilder\build\student\web\context.xml"/>
</target>

context.xml描述的项目目录位于Tomcat外的目录:
<Context path="/student" docBase="D:/AutoBuilder/build/student/web" debug="0"/>

这样应用程序是指向外界的,不位于Tomcat目录中,再执行undeploy时就没有这个问题了。而且使用war进行deploy时后台的错误也不会再出现了:
java.io.FileNotFoundException: webapps\student (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at org.apache.catalina.startup.ExpandWar.copyInternal(ExpandWar.java:226)

BTW,deploy时会在C:\Tomcat 5.5\conf\Catalina\localhost下拷贝生成context.xml,undeploy时会删除该文件。

# re: Ant+Tomcat自动部署 2007-10-24 16:03 paoding

    
[2] 运用SlidingDrawer的隐藏/显示搜索框
    来源: 互联网  发布时间: 2014-02-18
使用SlidingDrawer的隐藏/显示搜索框
局部布局:

<LinearLayout
		android:orientation="horizontal"
		android:layout_width="250dp" 
		android:layout_height="wrap_content" 
		android:layout_centerVertical="true"
		android:layout_alignParentRight="true"
		>
	<SlidingDrawer 
		android:id="@+id/slidingdrawer"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent" 
		android:handle="@+id/handle"
		android:content="@+id/search" 
		android:orientation="horizontal"
		>
			<ImageView android:id="@+id/handle"
						android:layout_width="wrap_content" 
				android:layout_height="wrap_content" 
				android:src="/blog_article/@drawable/search2/index.html"
				android:scaleType="fitCenter"
				 />
			<AutoCompleteTextView 
				android:id="@+id/search"
				android:layout_width="fill_parent" 
				android:layout_height="wrap_content" 
				android:hint="个股查询"
				android:singleLine="true"
				android:completionThreshold="1"
				/>
	</SlidingDrawer>
</LinearLayout>


使用一看就明白:
mDrawer = (SlidingDrawer) findViewById(R.id.slidingdrawer);
		mDrawer.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener() {
			@Override
			public void onDrawerOpened() {
			}

		});

		mDrawer.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener() {
			@Override
			public void onDrawerClosed() {
			}

		});

		mDrawer.setOnDrawerScrollListener(new SlidingDrawer.OnDrawerScrollListener() {
			@Override
			public void onScrollEnded() {
			}

			@Override
			public void onScrollStarted() {
			}

		});


可以实现如下效果:
让AutoCompleteTextView 在屏幕的右面,使它不显示出来.当点击了ImageView后通过动画慢慢平移出来;再点击一下ImageView,又慢慢移动到屏幕外面.
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=67554&page=1#pid685961

Android 3.0 r1 API中文文档——SlidingDrawer
http://www.cnblogs.com/over140/archive/2011/04/04/2005078.html


Android提高第十九篇之"多方向"抽屉
http://blog.csdn.net/hellogv/archive/2011/03/21/6264706.aspx
1 楼 lindow 2011-08-08  
想问下楼主,竖直方向的如何实现呢??

    
[3] wml 实业字符
    来源: 互联网  发布时间: 2014-02-18
wml 实体字符
文本替换字符
显示效果 说明 实体表达式 实体ASC编码
& &(=and)符号 &amp; &#38; 
’ 单引号 &apos; &#39;
> 大于号 &gt; &#62;
< 小于号 &lt; &#60;
空格 &nbsp; &#160;
" 双引号 &quot; &#34;
- 连字号 &shy; &#173;


URL   ESCAPE转换字符(标准:RFC2396)
RESERVED UNWISE DELIMITERS
; %3b { %7b < %3c
/ %2f } %7d > %3e
? %3f  %7c # %23
: %3a \ %5c   %25
@ %40 ^ %5e   %22
& %26 [ %5b    
= %3d ] %5d    
+ %2b ` %27    
$ %24        
, %2c        
空格 %20    

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
linux iis7站长之家
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3