【问题标题】:Problems with classpath with JSP using maven exec:java plugin under Windows在 Windows 下使用 maven exec:java 插件的 JSP 的类路径问题
【发布时间】:2014-03-18 18:32:39
【问题描述】:

我正在尝试从main(...) 运行一个 Jetty Web 框架,该框架加载一个在运行时加载 JSP 的 Spring Web 上下文。这在 OSX 和 Linux 上使用 mvn exec:java 的命令行效果很好。但是在 Windows 上,运行 Cygwin,我无法让它完全工作。

应用程序加载并且网络上下文似乎构建良好。然而,当第一个 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 中添加了一些东西?提前致谢。

【问题讨论】:

  • 您使用的是哪个版本的 maven?你看过ant的源码吗?
  • 我使用的是 maven 2.2.1 而我没有使用 ant @SotiriosDelimanolis。
  • 无论您的日志产生什么似乎都在使用 ant,我只是假设它是 maven。对于旧版本,是否可能不支持 Java 7(如果您正在使用的话)编译器。
  • 呃,对。我想知道我是不是从 gwt-dev 那里扯了一些我不应该是@SotiriosDelimanolis 的废话。感谢您戳我实际查看所有路径。

标签: java jsp jetty classpath exec-maven-plugin


【解决方案1】:

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 中添加了一个特定的 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 似乎可以工作。

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

【讨论】:

    猜你喜欢
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2011-02-21
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多