什么是java控制台应用程序的良好部署目录结构

时间:2012-12-03 15:33:16

标签: java unix

我有一个Java控制台应用程序,我准备部署到Unix服务器上。我正在编写一个shell脚本来运行该应用程序。

我打算将我的shell脚本放在一个文件夹中,我的应用程序jar和依赖jar(spring等)再次放在一个单独的文件夹中的不同文件夹和属性文件(那些需要维护'live')。然后我会让我的shell脚本遍历'jars'和'properties'文件夹中的文件,将它们附加到类路径中,然后再调用java ...

这是一个'好'的部署结构吗?是否有关于如何安排文件以最大化可维护性和稳定性的指南?有没有明显的“错误”方法来做到最好避免?

我应该补充一点,对于以前的项目,我将所有shell脚本(启动java进程和那些不运行的脚本)放入脚本文件夹,将我的应用程序jar放入库子文件夹中的库jar文件夹和外部资源到config子文件夹。然后我编写了一个显式加载所有文件的脚本。每当我升级库jar时,写作都需要很长时间才能完成。这一次,我想做得更好。此外,我觉得没有必要将我的应用程序JAR与库分开。

4 个答案:

答案 0 :(得分:2)

对于它的价值,这就是我们使用的东西;

/
    /class
        //package hierarchy here, raw .class files
    /lib
        //library jars here, apache commons, gson etc, all .jars
    /conf
        //.properties files go here, including ones for libraries
    /doc
        //program documentation files, typically .txt
        /javadocs
            //java doc html root
    /sh
        //shell scripts including execute.sh and compile.sh

我们使用ant进行构建,如果需要,通常会为源树提供src文件夹。这样,您只需将/class/lib添加到类路径中,并且永远不会更改。

答案 1 :(得分:1)

您的案例的良好结构是所谓的uberJar或oneJar,可以使用多个utils制作,只需google它。我也可以推荐这样一段很好的代码http://www.jdotsoft.com/JarClassLoader.php

答案 2 :(得分:1)

坦率地说,如果它只是一个小应用程序,我会将它全部放在/opt/<my_java_app>下,并且在那里有一个目录子结构,就像你在开发中那样。

如果您想更加符合UNIX建议的做法,请将您的可执行文件(包括jar)放入/usr/local/bin/<my_java_app>,将配置文件放入/etc/<my_java_app>,日志文件和其他数据/var/<my_java_app>中的文件。

此外,您可能需要参考this document

答案 3 :(得分:0)

构建系统本机程序包,并使用系统默认值。如果使用Debian,请从构建系统直接创建.deb(例如,使用ant deb task)。如果使用rpms,请使用rpm task。这样,您就可以像其他任何一个一样轻松地部署,取消部署和更新应用程序。

系统包应该将库(我使用/usr/share/java/AppName用于我的jar)和配置(到/etc/AppName/home/UserName/.AppName)分开;我将符号链接到/usr/bin的启动脚本。除此之外,没有太大的复杂功能让事情发挥作用。我建议在你的发行版中找到众所周知的基于java的包并复制它们的启动脚本(特别是它们的VM定位魔法)。