运行 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 二进制文件?
- 我的系统上安装了 jdk/jre 8 和 jdk 7。
- 我使用 jdk 8 作为 运行eclipse 时间(在 eclipse.ini 内)(它是霓虹灯,如果我尝试使用 7 则不会 运行 ) 并且我的 'installed jre' 设置为 (jdk) 7(请参见下面的第一个屏幕截图)
- JAVA_HOME 变量设置为 7(如果我 运行 java -version 它输出 7)
- 我多次重启了eclipse
- m2e的执行环境运行配置也设置为jdk7(第二张截图)
任何 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
可执行文件的任何其他方式 ;)
注意:最终最好的方法是避免 运行 进程调用进程,它必然会导致像这样的错误.
所以,这不是关于 运行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 二进制文件?
- 我的系统上安装了 jdk/jre 8 和 jdk 7。
- 我使用 jdk 8 作为 运行eclipse 时间(在 eclipse.ini 内)(它是霓虹灯,如果我尝试使用 7 则不会 运行 ) 并且我的 'installed jre' 设置为 (jdk) 7(请参见下面的第一个屏幕截图)
- JAVA_HOME 变量设置为 7(如果我 运行 java -version 它输出 7)
- 我多次重启了eclipse
- m2e的执行环境运行配置也设置为jdk7(第二张截图)
任何 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
可执行文件的任何其他方式 ;)
注意:最终最好的方法是避免 运行 进程调用进程,它必然会导致像这样的错误.