2014-02-18 41 views
1

我試圖從main(...)運行一個Jetty web框架,該框架加載了一個在運行時加載JSP的spring web上下文。這在OSX和Linux上使用mvn exec:java的命令行效果很好。但是,在運行Cygwin的Windows上,我無法完全發揮作用。使用maven exec的JSP類路徑問題:Windows下的java插件

應用程序加載和web上下文似乎構建正常。然而,當第一個JSP頁面呈現的JVM去編譯它的飛行和引發以下錯誤/異常:

org.apache.tools.ant.BuildException: Unable to find a javac compiler; 
com.sun.tools.javac.Main is not on the classpath. 
Perhaps JAVA_HOME does not point to the JDK 
    at org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory.getCompiler(CompilerAdapterFactory.java:105) ~[gwt-dev-2.5.1.jar:na] 
    at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:924) ~[gwt-dev-2.5.1.jar:na] 
    at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:757) ~[gwt-dev-2.5.1.jar:na] 
    at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:382) [gwt-dev-2.5.1.jar:na] 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:472) [gwt-dev-2.5.1.jar:na] 
    ... 

我已經做了一噸的網絡搜索,並試圖在發佈前的一些事情。

  1. JAVA_HOME可變正確設置。
  2. 我已經確定它指向的JDK和而不是 JRE。 tools.jar文件確實存在於%JAVA_HOME%/lib/tools.jar之下。
  3. JAVA_HOME路徑在Program Files我擔心的空間,但用Progra~1替換它似乎也不工作。
  4. 我們已經嘗試了Cygwin下的mvn shell腳本以及DOS下的mvn.bat腳本,但兩者都以相似方式失敗。

其他人有這個問題嗎?我是否需要更改classpath以專門添加依賴項到tools.jar?也許有東西加入到pom.xml?提前致謝。

+0

你正在使用哪個版本的maven?您是否查看了[ant]的源代碼(http://grepcode.com/file/repository.springsource.com/org.apache.ant/com.springsource.org.apache.tools.ant/1.8.1/組織/阿帕奇/工具/螞蟻/任務定義/編譯器/ CompilerAdapterFactory.java#CompilerAdapterFactory.getCompiler%28java.lang.String%2Corg.apache.tools.ant.Task 29%)? –

+0

我正在使用maven 2.2。1,我沒有使用ant @SotiriosDelimanolis。 – Gray

+0

無論是生產你的日誌似乎是使用螞蟻,我只是假設它是maven。使用較舊的版本,是否有可能不支持Java 7(如果這是您正在使用的)編譯器。 –

回答

0

com.sun.tools.javac.Main不在類路徑中。

我不知道這是正確的解決方案,但我發現這個答案解決方法:

Using javah maven-antrun-plugin with jdk 1.7, classes.jar became tools.jar

我也利用這個答案:JDK tools.jar as maven dependency

我最終在pom中添加了一個特定的依賴關係,它將tools.jar專門添加到類路徑中:

<profiles> 
    <profile> 
     <id>windows</id> 
     <activation> 
      <activeByDefault>false</activeByDefault> 
      <os> 
       <family>windows</family> 
      </os> 
     </activation> 
     <dependencies> 
      <dependency> 
       <groupId>com.sun</groupId> 
       <artifactId>tools</artifactId> 
       <version>1.6</version> 
       <scope>system</scope> 
       <systemPath>${java.home}/../lib/tools.jar</systemPath> 
      </dependency> 
     </dependencies> 
    </profile> 
</profiles> 

僅當操作系統系列爲windows時,纔會添加相關性。系統路徑../在路徑中是必需的,因爲${java.home}由於某種原因最終爲$JAVA_HOME/jreversion似乎並不重要,因爲1.7和1.6似乎工作。

希望這可以幫助其他人。