【问题标题】:Maven exec goal does not provide correct outputMaven exec 目标不提供正确的输出
【发布时间】:2021-06-15 05:55:39
【问题描述】:

我在 Eclipse EE (jdk 1.8) 中有一个 Maven 项目,我在命令行上使用 Maven 来构建和执行程序,使用以下命令:

mvn clean install exec:exec

所有依赖项都已添加到 pom.xml 文件中,我使用的是 Maven 3.6.3。 现在,假设我的主要方法如下:

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
    
        System.out.print("Enter string: ");
        String str = input.nextLine();
    }
}

现在,当我构建并运行它时,它会提示在输出“输入字符串:”之前提供输入。同样在向控制台输入内容后,它也不会出现。仅当按下 Enter 键时,键入的文本才会显示后跟“Enter string:”。

输出

现在如果代码如下:

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
    
        System.out.println("Enter string: ");
        String str = input.nextLine();
    }
}

它首先输出“输入字符串:”,然后是提示。但是,这里也是,键入的文本只有在按 Enter 后才会出现。

输出

但是,当在 Eclispe 中完成 Maven 构建时,键入的文本会毫无问题地显示。但是,存在“先输入后打印语句”。

我希望解决这些问题,因为我更喜欢 Maven 命令行。

这是maven-exec-plugin的配置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <executable>java</executable>
        <arguments>
            <argument>-classpath</argument>
            <classpath />
            <argument>package_name.Main</argument>
        </arguments>
    </configuration>
</plugin>

【问题讨论】:

    标签: java maven maven-exec-plugin


    【解决方案1】:

    我认为answer here 也适用于这个问题。为什么不直接执行它:

    java -classpath ./target/test-0.0.1-SNAPSHOT.jar com/Main
    

    在用 mvn package 打包之后(上面假设你的 artifactId 是 test 并且你的主类的包名是 com

    编辑:正如 cmets 中指出的那样。上面还假设,(如果你在项目中有你所说的依赖项),jar 包含它的依赖项,例如,在 pom.xml 中遵循 maven shade 插件配置:

      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    

    另一种方法是make the jar executable 并使用java -jar ./target/test-0.0.1-SNAPSHOT.jar 执行它

    【讨论】:

    • 以您所说的 JAR 需要是可执行的方式运行它,或者您需要指定整个类路径。
    • 是的,类路径的“target/classes/com:”部分有点多余,导致它实际上找不到主类.. 已编辑
    • 这仍然不正确。要么列出命令行上的所有依赖项,要么创建一个可执行的 JAR。对于后者,您需要 maven 程序集插件或 maven shade 插件。
    猜你喜欢
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2015-05-11
    • 1970-01-01
    • 2019-10-10
    相关资源
    最近更新 更多