英文:
How to configure lightbend/typesafeConfig via command line parameter when using picocli
问题
在我们的项目中,我们正在使用 Lightbend Config / TypesafeConfig。
我可以使用 java -jar
来运行我的程序。我的程序配置也可以通过使用命令行参数来完成。
示例:
java -jar simpleclient.jar -Dservice.url="http://localhost:8123"
现在,我引入了 https://picocli.info/,以获得更好的应用程序命令行处理能力。
我现在面临的问题是,picocli 不允许在标准配置中使用 -D... 参数。
这个问题该如何解决?
英文:
In our project we are using Lightbend Config / TypesafeConfig.
I can run my program with java -jar
. The configuration of my program can also be done by using command line parameters.
Example:
java -jar simpleclient.jar -Dservice.url="http://localhost:8123"
Now I introduced https://picocli.info/ to have a better command line handling for my application.
The problem I'm facing now ist, that picocli doesn't allow the usage of -D... parameters in the standard configuration.
How can this be changed?
答案1
得分: 0
当你说“picocli不允许使用 -D... 选项”时,我理解你的意思是你希望允许最终用户使用 -Dkey=value
的语法来设置系统属性。当这些参数传递给应用程序时,应用程序需要使用这些值来设置系统属性,如下所示。
首先,用户可以通过将 -Dkey=value
参数传递给 java
进程,而不是传递给jar中的主类,来设置系统属性。在下面的调用中,系统属性被直接设置,不作为应用程序的参数传递:
java -Dservice.url="http://localhost:8123" -jar simpleclient.jar
其次,您可以在应用程序中定义一个 -D
选项来设置系统属性:
@Command
class SimpleClient {
@Option(names = "-D")
void setProperty(Map<String, String> props) {
props.forEach((k, v) -> System.setProperty(k, v == null ? "" : v));
}
}
英文:
When you say “picocli doesn’t allow the use of -D... options”, I assume you mean you want to allow end users to set system properties with the -Dkey=value
syntax. When such parameters are passed to the application, the application needs to use these values to set system properties, as shown below.
First, users can set system properties by passing -Dkey=value
parameters to the java
process instead of to the main class in the jar. In the below invocation, the system properties are set directly and are not passed as parameters to the application:
java -Dservice.url="http://localhost:8123" -jar simpleclient.jar
Secondly, you can define a -D
option in your application that sets system properties:
@Command
class SimpleClient {
@Option(names = "-D")
void setProperty(Map<String, String> props) {
props.forEach((k, v) -> System.setProperty(k, v == null ? "" : v));
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论