有没有适用于类似http.conf的Unix配置文件的Java库?

13

有一些非常好的Perl库(例如Apache::Admin::Config)可以操作传统的Unix配置文件,如httpd.conf。请问是否有类似的优秀Java库呢?

我知道有一个名为Augeas的c库并带有Java绑定。有人使用过吗?

谢谢!


2
我知道Jetty(至少)能够读取.htaccess文件,这些文件基本上是Apache HTTPD配置样式。也许你可以重用他们的实现。 - sfussenegger
6个回答

6
我曾经(在项目中)与许多*nix项目(如Apache、Squid、smtpd、ldap、PAM等)的许多配置文件进行过编程工作。我已经意识到,绝对没有一个通用的格式(语法),而是每个项目都定义了自己的临时格式并实现了自己的自定义解析器。没有通用的规范。
因此,在*nix项目中处理配置文件的方法不是“使用解析器库”,而是“编写您自己的解析器”。
然而,有些项目会尝试遵循某种标准。其中最常见的是.ini文件格式(起源于OS / 2和Windows)或GConf文件格式,对于这些,您可以找到现成的解析器
Apache(读作a-patch-e,意为由许多补丁制成)属于自由格式类。它最初采用var value格式,然后在经过大量“修补”后,添加了一个多刺的XML语法来指定配置变量的范围和上下文。
  • 如果您只是调整配置文件的某些部分,则最好的方法是扫描文件以查找所需的配置变量,然后在本地处理该文件。
  • 但是,如果您需要配置整个文件,则最好基于C语言解析器创建一个Java解析器。

2

1

这里提供了一个Java库,用于解析Apache服务器配置。ApacheConfParser


这只用于解析Apache http.conf吗?如果我想使用该库来解析例如Squid配置文件,怎么办? - Gelin Luo

0

似乎没有现成的库可以实现这个目的。不过,您可以使用Augeas,这是一个用于编辑配置文件的库。与您正在寻找的解决方案不同的是,您需要事先告诉Augeas如何解释配置文件,这可能需要比它值得的时间更长。


0
Augeas确实有Java绑定,并且它还有一个Httpd镜头,因此它绝对是一个可接受的解决方案。

-2

Commons Configuration 可以操作配置文件。

它甚至提供了将操作后的属性保存到新文件中的选项。

PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties");
config.setProperty("colors.background", "#000000);
config.save("usergui.backup.properties);

请参考以下链接

http://commons.apache.org/configuration/userguide/howto_filebased.html#File-based_Configurations

甚至,Apache Ant也可以通过您自己的PropertyHelper实现来帮助您操作现有的配置文件。

http://ant.apache.org/manual/properties.html#propertyHelper

Apache配置提供了使用Bean Factory的可扩展性,您需要自己创建Apache配置文件httpd.conf域类,以使其正常工作。
如果要定义Java中的Apache模块,可以查看Netloony源代码中的service/apache/modules,以了解相关信息。

http://netloony.sourceforge.net/userguide/intro.html

在netloony中,配置文件的值以JTable的形式呈现,您需要使用任何配置框架将其持久化到文件中。
希望这可以帮助您,我了解目前Java中没有现成的方法来读取apache conf文件。我试图给出一个指针,让您可以开始尝试。

感谢提供的信息。但是Apache Commons Configuration不是我正在寻找的东西。这个库无法操作类似以下格式的Apache http配置文件:<pre> ServerTokens OS ServerRoot "/etc/httpd" PidFile run/httpd.pid Timeout 300 MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule> <IfModule worker.c> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 </IfModule> ... </pre> - Gelin Luo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接