运行 java 在 Eclipse 的控制台中使用 Maven

Running java from within the console in eclipse with maven

所以,这不是关于 运行ning java code 来自 eclipse 而是 执行java 命令 来自 eclipse 内部的 maven(在 eclipse 外部它工作得很好)。

具体来说:

我们有一个从 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

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

任何 help/pointers 不胜感激!!!

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>

基本上您是在尝试从另一个 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 进程向我的 PATH 添加了 Java 8 个条目。我找不到关于这些条目的任何相关文档,但很可能你的问题是一样的。在执行 .cmd 文件之前,您可以尝试使用类似 System.out.println(System.getenv("PATH")); 的方式回显 PATH 变量,以便在 Eclipse 和外部 Eclipse 之间进行比较。

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

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

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