编程语言
首页 > 编程语言> > 使用Maven在Eclipse中的控制台内运行Java

使用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(第二张屏幕截图)

installed jre's

run configuration

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

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