我正在分发一个简单的Java webapp作为开源 . 需要先配置webapp才能运行 - 需要创建配置文件,并且需要将该配置文件的位置作为 web.xml
中的参数告知webapp .
现在我的问题是如何最好地打包和分发webapp以便于安装,以及如何在文档中描述该安装过程 . 我能想到的选择是:
-
将webapp分发为WAR归档文件 . 建议用户将WAR部署到他们的Tomcat / Jetty /中,然后将他们的配置文件放入
/webapps/
myapp
/WEB-INF
,并相应地修改/webapps/
myapp
/WEB-INF/web.xml
-
将webapp作为源分发 . 建议用户将其配置文件放入
/src/main/webapp/WEB-INF
文件夹,然后相应地修改它们的/src/main/webapp/WEB-INF/web.xml
,然后使用Ant或Maven构建WAR,并将其部署到其servlet容器中 .
可能还有其他一些我无法想到的选择 .
对于需要安装,配置和部署webapp的用户来说,哪种设置最方便?
Edit: 我应该添加配置文件isn 't just a few lines – it'是一个包含数据库模式和其他内容的大文件,并且可能使用外部编辑器生成;因此,提供良好的默认值不是一种选择 .
4 回答
外部化此配置并可能提供一些默认值 . 如果您制作应用程序的新版本,每个人都必须记住备份该配置文件,然后重新部署然后复制该文件 - >这是一场噩梦 .
将配置放在其他地方有很多种方法 . 例如,您可以使用Java
Preferences
.我会说WAR,虽然不需要配置可能会更方便:)
什么是松散的,必须配置,以便每个人都没有合理的默认值?网址字符串?
在对此问题进行更多阅读后,提供了我自己的答案:JNDI似乎是“官方”,尽管有点重量级,解决这个问题的方法 . 使用JNDI,可以在
web.xml
中声明配置选项(如我需要的完整配置文件的位置),并且可以在位于Tomcat的/webapps
目录(或/contexts
)中的per-webapp _3014848中设置其实际值 . 码头目录) . 此设置具有许多优点:大配置文件可以存在于servlet容器和webapp之外
可以更新webapp而不会丢失配置
不需要修改或重建分布式战争
缺点:它有点复杂,需要弄乱XML,而在Tomcat上配置JNDI与Jetty的工作方式不同(需要两倍的文档) .
也许使用系统属性作为配置文件位置 . 可以轻松地在命令行中以
-Dorg.example.config.file=/foo/bar
,在启动脚本或Java代码中传递 . 我想我已经看过一些工具,例如记录框架,在webapps中使用类似事物的系统属性 .