【问题标题】:Running java from within the console in eclipse with maven使用 maven 在 Eclipse 中从控制台中运行 java
【发布时间】:2017-11-23 12:41:00
【问题描述】:

所以,这不是关于在 eclipse 中运行 java 代码,而是 在 eclipse 内部(在 eclipse 之外)从 maven 执行 java 命令工作得很好)。

具体来说:

我们有一个在 maven 中执行的 .cmd 文件,它的相关部分:

java -classpath (the classpath) com.bea.wls.ejbgen.EJBGen (and some other stuff)

当从命令行运行时(mvn clean install),我们会得到这个输出:

EJBGen WebLogic Server 12.1.3.0.0  Wed May 21 18:53:34 PDT 2014 1604337

 Creating my\package\ejb\Local.java
 Creating my\package\ejb\WebserviceLocal.java
 Creating my\package\ejb\ServiceLocal.java
 Creating my\package\ejb\LocalHome.java
 Creating my\package\ejb\WebserviceLocalHome.java
 Creating my\package\ejb\ServiceLocalHome.java

一切顺利,

但是在 eclipse 中执行时:

EJBGen isn't supported by JDK version higher than 1.7

现在,控制台/m2e 运行如何选择使用哪个 java 二进制文件?

  • jdk/jre 8 和 jdk 7 都安装在我的系统上。
  • 我使用 jdk 8 作为 eclipse 的运行时(在 eclipse.ini 中)(它是霓虹灯,如果我尝试使用 7,它将不会运行)并且我的“已安装 jre”设置为 (jdk) 7(请参阅第一个截图如下)
  • JAVA_HOME 变量设置为 7(如果我运行 java -version 它输出 7)
  • 我多次重启 eclipse
  • m2e运行配置的执行环境也设置为jdk7(第二个截图)

非常感谢任何帮助/指针!!!

S.

编辑:

(确实)exec-maven-plugin 插件的配置:

        <plugin>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <groupId>org.codehaus.mojo</groupId>
            <executions>
                <execution>
                    <id>runEJBGen</id>
                    <phase>initialize</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>runEJBGen.cmd</executable>
                <!-- optional -->
                <workingDirectory>${project.basedir}\src\main\java</workingDirectory>
            </configuration>
        </plugin>

我们使用这种机制(而不是 java 变体)是因为其他 - 项目特定 - 原因......

编辑2: pom.xml 的编译器选项

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>

【问题讨论】:

  • 您确定 Eclipse 没有可以配置 JRE8 的 Maven 特定配置吗?只是大声思考。
  • 默认情况下,Eclipse 使用配置为用于 maven 构建运行的 JDK...如果您从 Eclipse 启动它...如何定义执行环境?您是否检查过从普通命令行运行 Maven 构建?
  • 您使用exec-maven-plugin 来启动EJBGen 吗?
  • 确实,添加了配置
  • 我有 Java 8。如果我不设置属性 &lt;maven.compiler.target&gt;1.8&lt;/maven.compiler.target&gt;&lt;maven.compiler.source&gt;1.8&lt;/maven.compiler.source&gt;,Maven 项目默认为 JRE 1.5。这可能是你的问题吗?

标签: java eclipse maven java-8 java-7


【解决方案1】:

基本上,您正在尝试从另一个 Java 进程中运行java -classpath ... 命令,从而创建a new native process。从这一点开始,无论您对 Maven、Eclipse 等进行的任何配置都将被忽略,只有为调用进程设置的 PATH 环境变量将决定运行哪个 Java 版本,即第一个将使用在您的 PATH 上找到的 java 可执行文件。

您的流程如下所示:

|- root process
  |- Eclipse process (run on Java 8 as per Eclipse config)
    |- Maven process (run on Java 7 as per M2E run config)
      |- New native process which will execute your .cmd file
        |- New Java process running from first java executable found on PATH entries

这些进程中的每一个都继承其父进程的PATH 并可以对其进行操作。 Eclipse 可能会在您的 PATH 上添加包含 Java 8 可执行文件的新条目。例如,当我在 Eclipse 中运行 Maven 构建并打印 PATH 变量以将其与 Eclipse 外部的相同构建进行比较时,Eclipse 进程的开头有以下条目,这些条目在 Eclipse 外部不存在:

C:/Program Files/Java/jre1.8.0_121/bin/server
C:/Program Files/Java/jre1.8.0_121/bin
C:/Program Files/Java/jre1.8.0_121/lib/amd64

意味着我的 Eclipse 进程将 Java 8 条目添加到我的PATH。我找不到有关这些条目的任何相关文档,但您的问题很可能是相同的。在执行 .cmd 文件之前,您可以尝试使用类似 System.out.println(System.getenv("PATH")); 的方式回显 PATH 变量,以便在 Eclipse 和外部 Eclipse 之间进行比较。

尝试确保您的脚本运行正确的 Java 版本。您有多种选择:

  • (编辑:)按照@Bamboomy 的建议,在脚本中使用%JAVA_HOME%/bin/java 以使用JAVA_HOME 环境变量指向的Java 可执行文件
  • 不要运行java,它会在您的PATH 上搜索可执行文件,而是使用完整路径,例如C:/java7/bin/java.exe
  • 配置您的脚本以在您的PATH 上搜索java 可执行文件,测试版本并仅运行与您期望的版本匹配的java 可执行文件(您可以在Windows 上使用where 命令)
  • 在执行脚本之前操作调用进程PATH 环境变量以确保使用正确的Java 版本
  • 确保您的脚本运行正确的java 可执行文件的任何其他方式;)

注意:最终最好的方法是避免运行一个进程调用进程调用进程,它必然会导致这样的错误。

【讨论】:

  • 确实是很好的答案,当输出您所描述的路径中存在的路径前条目时,因为我们需要在不同的环境中运行这些脚本,所以绝对路径不太适合,所以我现在使用 %JAVA_HOME%/bin/java (但我不想把它作为单独的答案而不是降低你的...)
  • 很高兴有帮助。谢谢,我将编辑我的答案以添加您的解决方案作为建议。
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 2013-02-11
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
相关资源
最近更新 更多