[英]Running java from within the console in eclipse with maven
所以,这不是关于从eclipse中运行java代码 ,而是从eclipse中的maven 执行java命令 (在eclipse之外它运行得很好)。
具体来说:
我们有一个.cmd文件,我们从maven中执行,相关部分:
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二进制文件?
任何帮助/指针非常感谢!!!
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 ...
命令,从而创建一个新的本机进程 。 从这一点来看,无论您对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可能在包含Java 8可执行文件的PATH
上添加新条目。 例如,当我从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变量System.out.println(System.getenv("PATH"));
在执行.cmd文件之前,在Eclipse和Eclipse之间进行比较。
尝试确保您的脚本运行正确的Java版本。 你有各种选择:
%JAVA_HOME%/bin/java
来使用JAVA_HOME
环境变量指向的Java可执行文件 java
,而是使用完整的路径,例如C:/java7/bin/java.exe
PATH
上搜索java
可执行文件,测试版本并仅运行与您期望的版本匹配的java可执行文件(您可以在Windows上使用where命令) PATH
环境变量,以确保使用正确的Java版本 java
可执行文件的任何其他方式;) 注意:最终的最佳方法是避免运行进程调用进程调用进程,它必然会导致这样的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.