我尝试使用Eclipse的Jetty WTP plugin在Jetty上部署JSP页面。但我得到以下错误。看起来Jetty无法找到javac
。我是否需要为Eclipse中的Jetty WTP插件做任何设置,或者我该如何解决这个问题?
如果我将项目导出为.war
- 文件到jetty\webapps
,然后使用java -jar start.jar
手动启动Jetty,JSP页面就可以正常工作。但如果我按照所描述的那样使用Eclipse的Jetty WTP插件进行部署,它就无法工作。
我将JAVA_HOME
设置为C:\Program Files (x86)\Java\jdk1.7.0_01
,我在Windows 7上使用Jetty 8.0.4。
Servlets在当前设置下运行良好。关于如何为JSP页面解决这个问题的任何建议?
HTTP ERROR 500
Problem accessing /MyJavaWeb/formProcess. Reason:
PWC6345: There is an error in invoking javac. A full JDK (not just JRE) is required
Caused by:
org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac. A full JDK (not just JRE) is required
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:92)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:378)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:119)
at org.apache.jasper.compiler.Jsr199JavaCompiler.compile(Jsr199JavaCompiler.java:208)
at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:384)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:453)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:625)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:492)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:558)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:488)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:973)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:417)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:907)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:271)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:98)
at com.example.FormProcessServlet.doPost(FormProcessServlet.java:39)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:558)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:488)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:483)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:973)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:417)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:907)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
at org.eclipse.jetty.server.Server.handle(Server.java:346)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:442)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:941)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:801)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:224)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)
at java.lang.Thread.run(Unknown Source)
答案 0 :(得分:41)
Jan Bartel建议,来自Jetty: How to configure JSP:
通过在Eclipse中的start.ini
- 文件中添加以下行,它可以正常工作。
-Dorg.apache.jasper.compiler.disablejsr199=true
答案 1 :(得分:25)
我也碰巧突然得到org.apache.jasper.JasperException: PWC6345
我的Eclipse安装和 Jetty Maven插件(我用它从Eclipse中启动Jetty)。
原因是我之前不久更新了JDK安装。在Eclipse内部,这导致将“ Installed JRE ”更改为指向普通JRE安装而不是完整的JDK安装。 Jasper需要安装JDK,因为Jasper需要javac
(JRE不提供)。
就我而言,解决方案是为Eclipse提供JDK安装。为此,请选择窗口 - >偏好 - > Java - >已安装的JRE 。在这里,点击添加... ,然后指向您的JDK安装(在我的情况下, JRE主页 应指向 {{ 1}} 强>)。点击完成。然后返回已安装的JRE 概述, 删除旧的JRE参考和 选择新添加的JDK安装 。
答案 2 :(得分:5)
使用Run-Jetty-Run插件运行webapp时出现PWC6345错误。
修复方法是更改“首选项”中的“执行环境”设置。 由于我使用的是java 7,我需要更改JavaSE-1.7的设置。 可能其他执行环境的行为也类似。
窗口 - >偏好 - > Java - >已安装的JRE - >执行环境
选择左侧的JavaSE-1.7 - >选择右侧的* jdk * 1.7.x_xx
答案 3 :(得分:4)
好的,经过大量的搜索后解决了这个问题。
下载任何jdk并将JAVA_HOME指向此jdk。 在这个jdk文件夹中你会找到./bin和./jre/bin 从./bin复制javac并将其粘贴到./jre/bin [记住复制未剪切]
现在在eclipse中,运行 - >外部工具 - >外部工具配置,在左窗格中选择项目的build.xml,然后单击JRE选项卡中的右侧窗格。 单击已安装的JRE并在上一步中添加jdk。 完成后,选择这个新的JRE(jdk1.6.0_31)作为'Separate JRE',点击底部的apply并运行。
这假设你正在做一个码头:在eclipse上使用ant运行。
答案 4 :(得分:3)
奇怪,因为this thread建议:
解决方案是安装软件包jdk7-openjdk 也许这应该被添加到依赖项列表中(或者对于jetty而不是solr本身)?
但是这对Windows来说没什么用,因为openjdk7的二进制文件不容易获得 (在“OpenJDK availability for Windows OS”评论中,eckes提到找到了一些openjdk binaries for Windows,作为Build b146的一部分。但是,所说的版本不再维护了)
bug report填充的OP Jonas已被Eclipse wiki page "Jetty/Howto/Configure JSP"简单引用关闭。
答案 5 :(得分:3)
你有种植解决方案的人,但我认为它存在比修复start.ini更好的解决方案
我遇到了同样的问题然后我意识到这可能是因为我确实有64位的JDK7,而我应该有32位的JDK7。
所以我通过下载并使用JDK7 for 32Bit解决了我的问题。
此外,你还需要
我顺便在Windows上运行......
答案 6 :(得分:3)
我有同样的问题。当我运行where java
时,输出为:
C:\ Windows \ System32下\的java.exe
D:\ Program Files \ Java \ jdk1.7.0_25 \ bin \ java.exe
当然第一个是不正确的。所以我的问题在于PATH。我可以通过删除目录C:\ Windows \ System32 \中的java.exe来解决这个问题,因为我确定它没用,或者把第二个条目放在第一个条目的前面。
所以当遇到这个问题时,请检查你的PATH是否有jdk。我希望我的问题和我的解决方案在某种程度上有所帮助。
答案 7 :(得分:2)
我在使用Oracle JDK 1.7.0_60从Windows 7 cmd(或批处理文件)中独立运行jetty-runner 9.2.1时遇到了PWC6345错误,并且此论坛或其他论坛中没有其他建议有效。我会在这里留下我的解决方法,以防它帮助某人......
安装JDK后,运行'where java'显示两个不同的java.exe路径,第一个在Windows系统文件夹中,第二个在JDK文件夹中(我手动添加到路径中)。这两者实际上都是由同一个JDK安装程序安装的。系统文件夹中的java.exe优先,导致整个JDK未被检测到。
将JDK bin文件夹(例如“C:\ Program Files \ java \ jdk1.7.0_60 \ bin”)放在路径之前,其他系统路径修复了该问题。
答案 8 :(得分:0)
除了更新JAVA_HOME(见上文)...... 如果您从命令行遇到此错误(例如,从dos窗口启动Jetty服务器),请检查Windows找到java.exe的位置:
其中java
如果窗口返回显示您的jre的路径,请检查您的路径。机会是%PATH%包含指向jre而不是jdk的路径。
答案 9 :(得分:0)
如果您设置了环境变量JRE_HOME
,请取消设置或删除它
然后重新启动服务器。
答案 10 :(得分:0)
在liferay 7中:我通过使用jdk将服务器的运行时环境从jre更改为jre来解决此错误
答案 11 :(得分:0)
将war包部署到我们的服务器时出现此错误。
我的部署命令是(您可以找到应用的Web容器):
java -jar jetty-runner.jar --port 8020 xx.war
我写这个答案是因为它几乎让我困惑了一天。我尝试了上面的一些方法,但都失败了。
最后我发现我的服务器上只有jre但不是完整的jdk。
$ls /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64
jre
我通过搜索可用的jdk修复它并安装一个。
$yum search java | grep 'java-'
$sudo yum install java-1.8.0-openjdk-devel.x86_64
(注意-devel
)
答案 12 :(得分:0)
我将此行添加到eclipse文件夹中的“eclipse.ini”文件中。
-vm C:\ Program Files \ Java \ jdk1.8.0_131 \ bin \ javaw.exe
我也改变了eclipse中的JRE路径
windows - >偏好 - > java - >已安装的JRE
并提供了jdk的路径
C:\ Program Files \ Java \ jdk1.8.0_131
答案 13 :(得分:-1)
我在这个问题上花了很多时间,但事实证明这很简单。你所要做的就是:
在配置服务器运行时时选择JDK而不是JRE!
它就像一个冠军,我在glassFish 4.0中遇到了这个问题