当前位置: 首页 > 知识库问答 >
问题:

如何将命令行参数传递给焊接容器?

洪高扬
2023-03-14

我有一个通过命令行启动的应用程序,如Java-jar myassembledjarwithalldep.jar-foo bar

我正在使用weld.se来使用雅加达ee cdi规范。此外,我正在使用apache cli工具来解析comman行参数。

以下是我的maven导入:

        <dependency>
            <groupId>jakarta.enterprise</groupId>
            <artifactId>jakarta.enterprise.cdi-api</artifactId>
            <version>3.0.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.jboss.weld.se</groupId>
            <artifactId>weld-se</artifactId>
            <version>2.4.6.Final</version>
        </dependency>

        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
            <version>1.4</version>
        </dependency>

这就是我初始化容器的方式:

    public static void main(String[] args) {
        Weld weld = new Weld();
        WeldContainer container = weld.initialize();
        container.select(MyRunnerClass.class).get().run(args);
        container.shutdown();
    }

我可以做以下几件事:

public void run(String[] args) {
   CommandLineParser clp = new CommandLineParser(args);
   clp.parse();

但是由于我想要使用cdi的全部支持,我不能该对象,因为我自己创建了它!那么我如何将参数传递给容器,以便weld能够使用所需的参数创建CommandLineParser自己呢?

共有1个答案

子车成和
2023-03-14

我不熟悉apache cli工具,因此假设commandlineParser本身不是一个bean,您希望将其转换为一个bean。在这种情况下,您需要提供一个可以在创建对象时使用任何本地元数据的生产者方法。

下面的方法是一个生产者方法,需要放在另一个bean类中才能工作(更多细节请参见CDI规范):

@Produces
@ApplicationScoped // or any other scope that you want to use for the bean!
public CommandLineParser produceCmdLineParser() {
  String[] args = retrieveArgs(); // grab arguments from your main class or other place
  return new CommandLineParser(args);
}

然后,当您通过标准或动态注入向CDI容器请求commandlineParser类型的bean时,Weld将调用上面的producer方法(不要手动调用它)。

 类似资料:
  • 我使用atom-run(https://github.com/lsegal/atom-runner)运行内联我的nodejs程序。 使用此插件时,是否可以传递命令行参数?点击Alt R启动节点,但由于我的脚本需要参数,它失败了。 在运行之前,如何传递命令行参数?

  • 要启动Java程序,我可以传递如下参数: 在gradle命令行中有哪些好的方法可以做到这一点: 这是正在建造的。格雷德尔:

  • 问题内容: 我有一个用Node.js编写的Web服务器,我想使用一个特定的文件夹启动。我不确定如何在JavaScript中访问参数。我正在像这样运行节点: 这是我的服务器代码。Node.js帮助说这是可能的: 如何在JavaScript中访问这些参数?不知何故我无法在网上找到此信息。 问题答案: 参数存储在 以下是有关处理命令行参数的节点文档: 是一个包含命令行参数的数组。第一个元素是’node’

  • 问题内容: 我有一个用Node.js编写的Web服务器,我想使用一个特定的文件夹启动。我不确定如何在JavaScript中访问参数。我正在像这样运行节点: 这是我的服务器代码。Node.js帮助说这是可能的: 如何在JavaScript中访问这些参数?不知何故,我无法在网上找到此信息。 问题答案: 标准方法(无库) 参数存储在 以下是有关处理命令行参数的节点文档: 是一个包含命令行参数的数组。第一

  • 问题内容: 我需要稍后再运行一个mail.php文件,而不是让用户在提交register.php时等待发送验证电子邮件。 因此,我选择在1分钟后使用 at 命令在命令行中运行mail.php( 在register.php 中 调用 ): 但是,当我处于at命令的交互模式时,我只能将参数发送到该php文件。 由于我希望这是自动的,因此我需要在运行时使用shell脚本: 但是我找不到传递 {email

  • 问题内容: 是否可以通过命令行将参数传递给MySQL脚本? 在此示例中,类似于@start_date的内容: 问题答案: 发现在网络上的答案在这里。 基本上,假设我们要运行以下查询: 我们可以这样传递“ start_date”和“ end_date”: