如何在使用picocli时通过命令行参数配置lightbend/typesafeConfig

huangapple go评论79阅读模式
英文:

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=&quot;http://localhost:8123&quot;  -jar simpleclient.jar

Secondly, you can define a -D option in your application that sets system properties:

@Command
class SimpleClient {

    @Option(names = &quot;-D&quot;)
    void setProperty(Map&lt;String, String&gt; props) {
        props.forEach((k, v) -&gt; System.setProperty(k, v == null ? &quot;&quot; : v));
    }
}

huangapple
  • 本文由 发表于 2020年10月23日 23:32:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/64503016.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定