我正在尝试从main(...)
运行一个Jetty Web框架,该框架加载一个在运行时加载JSP的Spring Web上下文。 这在OSX和Linux上使用mvn exec:java
命令行效果很好。 但是在Windows上运行Cygwin,我无法让它完全工作。
应用程序加载,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]
...
我已经做了大量的网络搜索,并在发布之前尝试了很多东西。
JAVA_HOME
变量设置正确。- 我已经确保它指向JDK而不是JRE。
tools.jar
文件确实存在于%JAVA_HOME%/lib/tools.jar
下。 JAVA_HOME
路径在Program Files
,我担心空间,但用Progra~1
替换它似乎也不起作用。- 我们已经尝试了 Cygwin 下的
mvn
shell 脚本和 DOS 下的mvn.bat
脚本,但都失败了。
还有其他人有这个问题吗? 我是否需要更改classpath
以以某种方式专门向tools.jar
添加依赖项? 也许在pom.xml
中添加了一些东西? 提前谢谢。
com.sun.tools.javac.Main 不在类路径上。
我不确定这是正确的解决方案,但我从这个答案中找到了一个解决方法:
在 jdk 1.7 中使用 javah maven-antrun-plugin,类.jar变成了工具.jar
我也利用了这个答案:JDK工具.jar作为maven依赖项。
我最终在pom中添加了一个特定的Windows依赖项,该依赖项专门将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/jre
。version
似乎并不重要,因为 1.7 和 1.6 似乎有效。
希望这对其他人有所帮助。