簡體   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