在Windows下使用maven exec:java插件的JSP类路径问题



我正在尝试从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]
...

我已经做了大量的网络搜索,并在发布之前尝试了很多东西。

  1. JAVA_HOME变量设置正确
  2. 我已经确保它指向JDK而不是JRE。tools.jar文件确实存在于%JAVA_HOME%/lib/tools.jar下。
  3. JAVA_HOME路径在Program Files,我担心空间,但用Progra~1替换它似乎也不起作用。
  4. 我们已经尝试了 Cygwin 下的mvnshell 脚本和 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/jreversion似乎并不重要,因为 1.7 和 1.6 似乎有效。

希望这对其他人有所帮助。

最新更新