zoukankan      html  css  js  c++  java
  • 如何在Linux上部署Java应用程序

    如何在Linux上部署Java应用程序

    ==========================
    设置Linux的.bash_profile
    ==========================
    在.bash_profile中设置JAVA_HOME和CLASSPATH变量, 并将$JAVA_HOME/bin加到PATH变量中
    ###begin of JAVA CONFIGURATION
    JAVA_HOME=/usr/jdk1.6.0_21
    CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
    export CLASSPATH
    PATH=$JAVA_HOME/bin:$PATH
    export PATH
    ###end of JAVA CONFIGURATION

    ==========================
    Hellow world程序的部署
    ==========================
    对于hello world一类的程序, 往往只有很少的几个java文件, 除了jre System Library之外, 不依赖其他架包. 部署这类程序很简单, 只需要将这些java源码编译成.class, 把这个class文件拷贝到Linux机器上, 就可以运行了. 编译和运行的方法是:
    编译:
      javac helloworld.java
    运行(如果不需要依赖架包):
      java helloworld 
    运行(如果依赖其他架包):
      java -cp abc.jar:def.jar helloworld


    ==========================
    实际项目程序的部署
    ==========================
    对于多数java程序, 会包含很多个java文件, 而且通常会引入一些常用的架包, 比如log4j,commons-lang3-3.0.jar等等. 如果还是以class文件的形式部署, 会非常繁琐. 幸好java支持jar部署.

    比如我们有一个project_abc项目, 在eclipse中的文件结构为:
        src
          abc.java
          def.java
        test
        lib
          log4j-1.2.9.jar 
          commons-lang3-3.0.jar

    Eclipse有2个打包jar的向导, 使用方法是, 在package explorer中选中项目, 右击菜单中选择<export>, 在之后的export界面上, 有两个向导可供选择:
    1.选择java/jar项
    2.选择java/runnable jar file项

    假设我们使用java/jar导出向导, 为了减小jar的文件大小, 将不导出lib目录下的所有架包, 同时选择自动生成 MANIFEST.MF 文件(还有一个选项为, 选择已有的  MANIFEST.MF 文件, 这个特性很重要哦, 如果我们每次打包后都需要修改 MANIFEST.MF 文件, 是相当痛苦的事情). 最后通过该向导导出的jar文件为project_abc.jar

    下面举例说明要在Linux上的/home/user_1/project_abc 中部署project_abc.jar, 在将project_abc所使用的架包统统拷贝到/home/user_1/project_abc/lib目录后, 试着输入如下命令
    java -jar project_abc.jar,
    报错, 原因是project_abc.jar不知道如何加载所需要的架包
    java -cp lib/log4j-1.2.9.jar:lib/commons-lang3-3.0.jar  -jar project_abc.jar
    依旧报错, 原因仍是project_abc.jar不知道如何加载所需要的架包, 这次错误好像不应该啊, 已经指定了classpath, 为什么呢? 愿意是加了-jar选项后, 就会忽略-cp选项, 所以project_abc.jar还是不知道如何加载所需要的架包. 这时候, 需要我们修改project_abc.jar中的 MANIFEST.MF 文件, 在 MANIFEST.MF 中指定 classpath属性.

    原来的 MANIFEST.MF 内容为
    Manifest-Version: 1.0
    Main-Class: com.abc.project_abc.Monitor

    修改后的 MANIFEST.MF 内容为
    Manifest-Version: 1.0
    Main-Class: com.smic.edw.etl.unloadingfw.assembly.JobMonitor
    Class-Path: цц
    ццlib/commons-lang3-3.0.jarцц
    ццlib/log4j-1.2.9.jarцц
    цц
    Created-By: Apache Ant 1.5.1

    上面的ц为空格, Class-Path的格式比较变态,详见http://www.rgagnon.com/javadetails/java-0587.html, 简单讲
    1. 第一个jar前面至少有一个空格
    2. 两个jar路径之间至少包含2个空格
    3. 最后一个jar至少有一个空格
    为了避免编辑器自动将行尾的空格trim掉, 可以在每行前面放2个空格, 最后再加上一个可有可无的Created-By属性.


    ==========================
    如何自动化打包和替换MANIFEST.MF文件过程
    ==========================
    前面讲过, 使用Eclipse export有2个打包向导. 通常, 项目需要不断修改, 不断地打包, 然后再部署到Linux上做测试. 这时候, 要能自动化完成打包操作就能爽了.
    1.选择java/jar向导(能支持半自动化打包)
      在该向导的最后环节, 可以选择是否要将该向导设置的选项保存为一个jar description文件(扩展名为.jardesc). 如果我们保存了jardesc文件, 以后, 可以在eclipse中点击jardesc文件来直接调出export向导, 很方便就能完成打包过程. 当然, 为了解决classpath问题, 我们应该使用已经编辑好的  MANIFEST.MF 文件, 而不是让向导自动生成一个全新的  MANIFEST.MF 文件.
    2.java/runnable jar file向导(能支持全自动化打包)
    该向导可以将打包过程生成为ant xml文件, 一旦有了这个xml文件, 你就可以使用ant来完成自动化打包.该向导的名称为runnable jar file,从名称看, 好像是仅仅适合于可运行程序的打包,我猜想通过修改ant的xml文件, 应该也支持类库的打包. 
    至于关于如何使用ant, 可以看
       http://www.simonwhatley.co.uk/using-ant-with-eclipse
      

  • 相关阅读:
    函数,封装
    c++增强c
    Git安装与使用
    Ajax&Jquery
    IntelliJ Idea2018.2,Pycharm20183.2破解教程
    事务&数据库连接池&DBUtils&JSP设计模式
    JSP&EL&JSTL
    Http协议和Servlet
    接收流信息---字符串
    lucene索引库优化一
  • 原文地址:https://www.cnblogs.com/harrychinese/p/how_to_depoly_java_project.html
Copyright © 2011-2022 走看看