使用Maven在Eclipse中的控制台内运行Java
作者:互联网
因此,这不是要从eclipse内运行Java代码,而是要从eclipse内的maven执行java命令(在eclipse之外可以正常工作).
具体来说:
我们在maven中执行了一个.cmd文件,它的相关部分是:
java -classpath (the classpath) com.bea.wls.ejbgen.EJBGen (and some other stuff)
从命令行运行(mvn全新安装)时,我们确实得到以下输出:
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>
解决方法:
基本上,您试图从另一个Java进程中运行java -classpath …命令,从而创建a new native process.从这一点开始,您对Maven,Eclipse等的任何配置都将被忽略,并且仅为调用过程将决定要运行的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中.我找不到与这些条目有关的任何相关文档,但是您的问题很可能是相同的.您可以尝试使用类似System.out.println(System.getenv(“ PATH”)))的方法来回显PATH变量.在执行您的.cmd文件以在Eclipse和外部Eclipse之间进行比较之前.
尝试确保您的脚本运行正确的Java版本.您有多种选择:
>(编辑:)如@Bamboomy所建议,在脚本中使用%JAVA_HOME%/ bin / java来使用JAVA_HOME环境变量指向的Java可执行文件
>而不是运行将在PATH上搜索可执行文件的Java,而是使用完整路径,例如C:/java7/bin/java.exe
>配置脚本以在PATH上搜索Java可执行文件,测试版本并仅运行与所需版本匹配的Java可执行文件(可以在Windows上使用where命令)
>在执行脚本之前操纵调用过程PATH环境变量,以确保使用正确的Java版本
>确保您的脚本运行正确的Java可执行文件的其他方法;)
注意:最终最好的方法是避免运行一个进程调用一个进程,它必然会导致此类错误.
标签:java-8,maven,eclipse,java-7,java 来源: https://codeday.me/bug/20191110/2014769.html