6

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

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

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

我应该补充一点,对于以前的项目,我将所有 shell 脚本(启动 java 进程的那些和不启动 java 进程的那些)放入脚本文件夹中,我的应用程序 jar 放入一个文件夹中,其中库 jar 在库子文件夹和外部资源中进入配置子文件夹。然后我编写了一个显式加载所有文件的脚本。每当我升级库 jar 时,它写起来很冗长,并且需要维护。这一次,我想做得更好。此外,感觉没有必要将我的应用程序 JAR 与库分开。

4

4 回答 4

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到您的类路径中,并且永远不会改变。

于 2012-12-03T18:39:59.327 回答
1

适合您的案例的良好结构称为 uberJar 或 oneJar,可以使用许多实用程序制作,只需 google 即可。我也可以推荐这样一段不错的代码,例如http://www.jdotsoft.com/JarClassLoader.php

于 2012-12-03T18:33:35.807 回答
1

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

如果您想更符合 UNIX 推荐的做法,请将您的可执行文件(包括您jar的./usr/local/bin/<my_java_app>/etc/<my_java_app>/var/<my_java_app>

此外,您可能需要参考此文档

于 2012-12-03T18:41:43.500 回答
0

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

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

于 2012-12-03T18:51:08.957 回答