Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何使用配置值创建我创建的库_Java_Maven_Configuration_Config - Fatal编程技术网

Java-如何使用配置值创建我创建的库

Java-如何使用配置值创建我创建的库,java,maven,configuration,config,Java,Maven,Configuration,Config,长话短说,我正在制作一个需要几个“配置值”的java库。目前,我只是在根目录中使用config.properties文件并从中读取,但我不知道如何使用可分发的jar文件 我曾考虑将这些配置值参数设置为库中类的构造函数,但值太多了,这似乎不是正确的做法 本质上,我只需要我的库的用户能够使用jar文件,但也能够更改影响库功能的几个配置值 如果有什么不同,我将使用maven来构建我的项目 提前感谢。(假设您只是在JavaSE中工作,因为JavaEE有其他配置机制。) 模式是在jar中创建一个单例类,为

长话短说,我正在制作一个需要几个“配置值”的java库。目前,我只是在根目录中使用config.properties文件并从中读取,但我不知道如何使用可分发的jar文件

我曾考虑将这些配置值参数设置为库中类的构造函数,但值太多了,这似乎不是正确的做法

本质上,我只需要我的库的用户能够使用jar文件,但也能够更改影响库功能的几个配置值

如果有什么不同,我将使用maven来构建我的项目

提前感谢。

(假设您只是在JavaSE中工作,因为JavaEE有其他配置机制。)

模式是在jar中创建一个单例类,为其他类提供配置。它从jar中的属性文件中读取默认值。允许jar调用方通过将属性设置为系统属性来重写属性

在java doc for Property类中,有一个构造函数提供默认值和重写,并获取“net”属性

为调用者提供选项,通过将文件路径作为系统属性指定属性文件


的Log4j和java.util.logging工作如下。阅读这些配置文档将有助于解释

我将把你的问题分成两部分,然后分别回答每一部分

我曾考虑将这些配置值参数设置为库中类的构造函数,但值太多了,这似乎不是正确的做法

关于我上面引用的你的问题,请参阅以下问题的公认答案(由我撰写):

本质上,我只需要我的库的用户能够使用jar文件,但也能够更改影响库功能的几个配置值

听起来您的配置文件将包含N个变量,用户可能希望自定义其中2或3个变量的值。如果N相对较小,则可能可以使用非此即彼或方法进行配置:

  • 用户提供一个包含所有N个变量的值的配置文件(该文件的位置可以通过系统属性、环境变量或库的构造函数的参数来指定)

  • 或者您的库使用一组“内置”的默认配置值,我建议您将其放入一个属性文件中,并将其绑定到库的jar文件中,然后通过调用
    ClassLoader.getSystemResourceAsStream()
    进行访问

但是,如果N很大,则您可能希望库为配置变量提供语法和语义:

  • 您的库使用一组“内置”的默认配置值,我建议您将其放入一个属性文件中,并将其绑定到库的jar文件中,然后通过调用
    ClassLoader.getSystemResourceAsStream()
    进行访问。这为所有N个变量提供默认值

  • 您的库将加载一个(可选)用户指定的配置文件,该文件可能包含0到N个变量。用户指定的配置变量的值用于覆盖内置默认值


显然,您需要在库中实现and逻辑,但这实际上只是一个SMOP(简单的编程问题)。也许最简单的方法是迭代用户提供的
Properties
对象中的条目,并将它们复制到包含默认值的
Properties
对象中。通过这种方式,用户指定的值将覆盖默认值。

我建议您使用配置文件。但是您的库必须足够聪明,可以首先在多个公共位置找到它,例如在用户主页和当前目录中,如果未找到配置文件,请查找一个特定的环境变量以指向配置文件,如果环境变量仍然不在那里,您可以在类路径中使用默认配置。如果在根目录中自动创建配置文件,这可能会很有用?期望用户自己创建它似乎很愚蠢。