zoukankan      html  css  js  c++  java
  • linux服务器部署jar包以及shell脚本的书写

    背景:记录在linux环境下部署jar程序的过程

    1 部署过程记录

    1.1 程序结构

    这里的main函数就在DemRest2.java 文件中。

    为了部署方便,要做到以下两点:

    1 在导出的jar包中不包含依赖的jar文件

    2 程序用到的配置文件可以让用户进行自定义 ,不将其放在jar包中。

    1.2 导出jar包

    这里导出普通的jar包即可。为了方便传输,只导出必须的程序文件。

    在jar包导出后,进入导出的jar包中,将配置文件tws.properties文件删除。

    1.3 程序部署

    将所有需要的jar包放在lib目录下面,包括我们导出工程的jar包tws-client-demo.jar

    在用户自定义目录中,放置运行脚本和配置文件。

    ps:运行脚本所在的目录,就相当于程序运行的根目录,所有的配置文件和运行脚本放置在同一目录即可。

    这里程序中怎么读取配置文件,还需要好好研究。。。。。。。

    #!/bin/sh
    sourceMsgPath=/home/tws/server/tws-test/userMsg/lxw/
    
    source /etc/profile
    for i in $HOME/server/tws-test/lib/*;
        do CLASSPATH=$i:"$CLASSPATH";
    done
    export CLASSPATH=.:${CLASSPATH}
    java  demo.rest.DemRest2 $sourceMsgPath$1
    
    echo "Success!"

     对照以上脚本进行解释:

    运行程序:

    在用户目录下面,程序能够读到jar包外部的配置文件。

     2 标准脚本

     在网上找的一个脚本范例:

    在编写shell脚本出现错误时候,可以作为参考:

    #! /bin/sh
    export JAVA_HOME=/usr/java/jdk1.6.0_18
    export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
    for i in lib/*.jar; 
            do CLASSPATH=$i:${CLASSPATH} 
    done
    export CLASSPATH=.:${CLASSPATH}
    java -cp ${CLASSPATH} main方法所在包名.main方法所在的类名
    如果上述脚本不能顺利执行,可以尝试
    #!/bin/bash后追加
    
    source /etc/profile
    source ~/.bash_profile
    
    测试下。。

    java -cp java的cp命令

    java -cp .;c:dir1lib.jar Test
     
    -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”
     
    分隔,linux上是分号“:”分隔。不支持通配符,需要列出所有jar包,用一点“.”代表当前路径。

    3 半自动化工程部署

    ps:在处理第三方管理平台项目时候,突然想写一个自动化的shell脚本,其实脚本很简单,只不过前期走了些弯路,虽说麻烦,但是对自己来说也是一次提高。
     
    我遇到的问题是
    ps:刚开始我还以为是脚本语法问题,后来网上搜索才知道是这个问题。解决后,后面的脚本就是常用命令的集合。

    问题:通过ftp传输工具在windows下编辑的脚本,在执行的时候会出现no such file or directory情况。
    是因为平台不同导致的。执行下列命令即可
    INUX下SHELL编程脚本无法执行,提示no such file or directory.
    sudo vim xx.sh
    :set ff=unix
    :wq
    就OK了
    (如果是在windows里写的脚本,你输入:set ff 应该显示的是DOS)

    最终的shell脚本:
    #!/bin/bash
    #war包上传临时目录
    warPath=/usr/local/tmp-tms
    #tomcat中webapps中文件
    service_webapps=/usr/local/service-tomcat7/webapps
    web_webapps=/usr/local/web-tomcat7/webapps
    #待替换的配置文件
    from_service_config=$warPath/224-service
    to_service_config=$service_webapps/tms_service/WEB-INF/classes
    from_web_config=$warPath/224-web
    to_web_config=$web_webapps/tms/WEB-INF/classes
    
    deployService(){
        #清空tomcat  webapps下的文件
        rm -rf $service_webapps/*
        echo "完成临时目录的清理:$service_webapps"
        #移动war文件到webappps目录
        mv $warPath/tms_service.war $service_webapps
        echo "完成war文件的移动:$service_webapps/tms_service.war"
        #解压war包
        cd $service_webapps
        unzip tms_service.war -d tms_service
        echo "完成war文件解压:$service_webapps/tms_service.war"
        #替换war中的配置文件
        cp $from_service_config/log4j.properties $to_service_config/log4j.properties
        cp $from_service_config/resources.properties $to_service_config/resources.properties
        cp $from_service_config/service.xml $to_service_config/service.xml
        echo "完成Service工程配置文件的替换!"
    }
    
    deployWeb(){
        #清空tomcat  webapps下的文件
        rm -rf $web_webapps/*
        echo "完成临时目录的清理:$web_webapps"
        #移动war文件到webappps目录
        mv $warPath/tms.war $web_webapps
        echo "完成war文件的移动:$web_webapps/tms.war"
        #解压war包
        cd $web_webapps
        unzip tms.war -d tms
        echo "完成war文件解压:$web_webapps/tms.war"
        #替换war中的配置文件
        cp $from_web_config/log4j.properties $to_web_config/log4j.properties
        cp $from_web_config/service.xml $to_web_config/service.xml
        cp $from_web_config/tms.properties $to_web_config/tms.properties
        echo "完成web工程配置文件的替换!"
    }
    
    ##############脚本入口
    #./deploy.sh service      ---只部署service
    #./deploy.sh web          ---只部署web
    #./deploy.sh both           ---同时部署service和web
    
    if [ $1 == "service" ]
    then
        deployService
       echo "只部署service,successful"
    elif [ $1 == "web" ]
    then
        deployWeb
       echo "只部署web,successful"
    elif [ $1 == "both" ]
    then
       deployService
       sleep 10
       deployWeb
       echo "同时部署service和web,successful!"
    else
       echo "请输入一个正确参数:service web both"
    fi
    View Code

     用到啥就去查什么,一切都不是困难,态度决定成效!!!!

     
     
  • 相关阅读:
    Class类
    HTML表单格式化
    HTML表单组件
    html常用标签
    Html概述
    Myeclipse2016安装Aptana
    长元音
    对比法记音标
    Java基础八--构造函数
    WPS2012交叉引用技巧,word比wps这点强更新參考文献
  • 原文地址:https://www.cnblogs.com/lixuwu/p/7163710.html
Copyright © 2011-2022 走看看