繁体   English   中英

使用maven在eclipse中从控制台内运行java

[英]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二进制文件?

  • jdk / jre 8和jdk 7都安装在我的系统上。
  • 我使用jdk 8作为eclipse的运行时(在eclipse.ini中)(它是霓虹灯,如果我尝试使用7则不会运行)并且我的'安装的jre'设置为(jdk)7(参见下面的第一个截图)
  • JAVA_HOME变量设置为7(如果我运行java -version它输出7)
  • 我多次重启eclipse
  • m2e运行配置的执行环境也设置为jdk7(第二个屏幕截图)

安装jre的

运行配置

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

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版本。 你有各种选择:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM