【问题标题】:Run multiple classes using Maven使用 Maven 运行多个类
【发布时间】:2019-01-01 10:13:28
【问题描述】:

我有一个包含几个类的包(每个类都封装了一个可执行程序,即使用 main() 方法),即:

com.myorg.examples.classA
com.myorg.examples.classB
etc.

所有类都属于同一个包 (com.myorg.examples)。

我知道我可以使用 maven 来运行一个这样的类,例如:

mvn exec:java -D"exec.mainClass"="com.myorg.examples.classA"

我也知道我可以配置 exec-maven-plugin 以便使用更短的命令来做同样的事情,例如:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <executions>
    <execution>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>com.myorg.examples.classA</mainClass>
  </configuration>
</plugin>

然后使用:

mvn exec:java

但是,我想知道这是否可能:

  1. 使用 exec-maven-plugin(或另一个)配置多个执行并执行类似的操作

    mvn exec:classA       # or,
    mvn exec:java classA 
    

    所以 classA 运行,但使用比普通 exec:java 更短的语法。查看 XML 结构,似乎只能设置一个类,所以我不确定如何实现。

  2. 按顺序执行所有类,例如:

    mvn exec-all
    

    为了运行classA,下一个classB,等等。

我们将非常欢迎有关这些主题的任何帮助或链接。谢谢!

编辑:问题的第二部分已分拆到this other post

【问题讨论】:

  • 已回答问题的第 1 部分。第 2 部分已拆分为一个不同的问题,以使问题答案更清晰。

标签: java maven exec-maven-plugin


【解决方案1】:

您可以配置多个执行,自 Maven version 3.3.1 起可用

<project...>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.6.0</version>
        <executions>
          <execution>
            <id>default-cli</id>
            <configuration>
              <mainClass>com.soebes.test.First</mainClass>
            </configuration>
          </execution>
          <execution>
            <id>second-cli</id>
            <configuration>
              <mainClass>com.soebes.test.Second</mainClass>
            </configuration>
          </execution>
          <execution>
            <id>third-cli</id>
            <configuration>
              <mainClass>com.soebes.test.Third</mainClass>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins> 
  </build>
</project>

所以您现在可以通过以下方式调用 Maven:

下面会执行一个 where id:default-cli:

mvn exec:java

下面会执行一个 where id:second-cli:

mvn exec:java@second-cli

下面会执行where id:thirds-cli:

mvn exec:java@third-cli

问题是为什么你在不同的包中有几个主类,但在一个 Maven 模块中,这听起来对我来说有不同的模块(因为你已经有包)。另一个问题是你为什么需要执行它们通过 exec-maven-plugin?目的是什么?

【讨论】:

  • 感谢您的反馈!实际上,所有类都在同一个包中(我已经编辑了问题以使其更清楚)。关于 exec-maven-plugin,我对那个插件没有特别的偏好……如果问题可以用其他方法解决,那也很好。
  • 为什么需要通过 exec-maven-plugin 执行它们?这样做的目的是什么?测试?
  • 不确定问题的底线...我的意思是,正如我在上一条评论中所解释的,我没有将 exec-maven-plugin 用于任何特定目的。我的目标是能够使用“mvn”命令接口运行单独的类(恰好是同一个 Java 包的一部分)。如果有其他方法可以实现与 exec-maven-plugin 不同但仍然使用“mvn”命令,也可以。
  • 抱歉,您没有回答我的问题:为什么需要通过 exec-maven-plugin 执行您的类?你想达到什么目的?如果答案是:没有特别的原因?比你为什么要使用它?问一下?
  • 我正在使用 exec-maven-plugin 因为我不知道任何其他替代方法(使用 Maven)这样做:) 正如我上面所说,“如果有其他方法可以实现 [执行 Java 类] 不同于 exec-maven-plugin 但仍然使用“mvn”命令,也可以”。
【解决方案2】:

只需在 pom.xml 的相关位置添加以下代码

UTF-8 com.springexamples.demo.MainClassOne com.springexamples.demo.MainClassTwo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 2015-02-23
    • 2019-10-31
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多