使用Jetty WTP插件在Jetty上部署JSP页面时,“PWC6345:调用javac时出现错误”错误

我试图在Jetty上部署一个JSP页面,使用Eclipse的Jetty WTP插件 。 但是我得到下面的错误。 它看起来像Jetty无法findjavac 。 Eclipse中的Jetty WTP插件有什么设置吗?或者我该如何解决这个问题?

如果我将项目作为.war文件导出到jetty\webapps ,然后使用java -jar start.jar手动启动Jetty,那么JSP页面可以正常工作。 但是,如果我使用Jetty WTP插件为Eclipse进行部署,则不起作用。

我有我的JAVA_HOME设置为C:\Program Files (x86)\Java\jdk1.7.0_01和我在Windows 7上使用Jetty 8.0.4。

Servlets在当前的设置下工作正常。 有关如何解决这个JSP页面的任何build议?

 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) 

正如Jan Bartel所build议的,从Jetty:如何configurationJSP :

通过在Eclipse中的start.ini文件中添加下面的行,它工作正常。

 -Dorg.apache.jasper.compiler.disablejsr199=true 

在这里输入图像说明

我也碰巧突然得到org.apache.jasper.JasperException: PWC6345与我的Eclipse安装和Jetty Maven插件 (我用它从Eclipse中启动Jetty)。

原因是我之前不久更新了JDK安装。 在Eclipse内部,这导致将“ 已安装的JRE ”更改为指向纯JRE安装,而不是完整的JDK安装。 Jasper需要JDK安装,因为Jasper需要javac (JRE不提供)。

就我而言,解决scheme是为Eclipse提供JDK安装。 为此,请selectWindow – > Preferences – > Java – > Installed JRE 。 在这里,点击Add … ,然后指向你的JDK安装(在我的情况下, JRE home应该指向C:\Program Files (x86)\Java\jdk1.7.0_17 )。 点击完成 。 然后返回到“ 已安装的JRE”概述中删除旧的JRE引用select新添加的JDK安装

使用Run-Jetty-Run插件运行webapp时遇到了PWC6345错误。

解决方法是更改​​首选项中的执行环境设置。 由于我使用的是Java 7,我需要更改JavaSE-1.7的设置。 其他执行环境的行为可能相似。

窗口 – >首选项 – > Java – >已安装的JRE – >执行环境

select左边的JavaSE-1.7 – 在右边select* jdk * 1.7.x_xx

好的,经过大量的search之后解决了这个问题。

下载任何jdk并将JAVA_HOME指向此jdk。 在这个jdk文件夹里面,你会发现./bin和./jre/bin从./bin复制javac并粘贴到./jre/bin中[记住copy not cut]

现在在eclipse中, 运行 – >外部工具 – >外部工具 – configuration ,在左窗格中select您的项目的build.xml,然后单击右窗格中的JRE选项卡。 点击已安装的JRE并在上一步添加jdk。 完成后,select这个新的JRE(jdk1.6.0_31)作为'独立的JRE',点击底部的申请并运行。

这假定你正在做一个docker:在eclipse上使用ant运行。

奇怪,因为这个线程暗示:

解决scheme是安装包jdk7-openjdk
也许这应该被添加到依赖列表(或可能是docker,而不是solr本身)?

但是这在Windows上并没有多大的帮助,而openjdk7的二进制文件并不容易获得。
(在“ Windows操作系统的OpenJDK可用性 ”的评论中, eckes提到已经发现一些Windows版本的openjdk二进制文件 ,作为Build b146的一部分,但是这些版本不再被维护)

由OP Jonas填写的错误报告通过对Eclipse wiki页面“Jetty / Howto / Configure JSP”的简单引用而closures。

你有一些家喻户晓的解决scheme的人,但我认为它存在一个比解决start.ini更好的解决scheme

我生活的同样的问题,然后我意识到,这可能是因为我有一个64位JDK7,而我应该有一个JDK7为32。

所以我通过下载并使用JDK7 for 32Bit来解决我的问题。

另外,你仍然需要

  • 使用JDK而不是JRE
  • 设置你的JAVA_HOME

我在Windows上运行的方式…

我也有同样的问题。 当我运行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。 我希望我的问题和解决scheme有所帮助。

从Windows 7 cmd(或batch file)与Oracle JDK 1.7.0_60独立运行jetty-runner 9.2.1时出现PWC6345错误,在此或其他论坛中没有任何其他build议可行。 我会在这里离开我的解决方法,以防万一…

在安装JDK之后,运行'where java'会显示两个不同的java.exepath,第一个在Windows系统文件夹中,第二个在JDK文件夹中(这是我手动添加到path中的path)。 这两个实际上都是由相同的JDK安装程序安装的。 系统文件夹中的java.exe优先,导致完整的JDK不被察觉。

在其他系统path修复问题之前 ,在path上放置JDK bin文件夹(例如“C:\ Program Files \ java \ jdk1.7.0_60 \ bin”)。

除了更新JAVA_HOME(参见上文)之外…如果您遇到来自命令行的错误(例如,从dos窗口启动Jetty服务器),请检查Windowsfindjava.exe的位置:

哪里java

如果窗口返回的path显示到你的jre,然后检查你的path。 机会是%PATH%包含一个指向jre而不是jdk的path。

如果您设置了环境variablesJRE_HOME ,请将其取消设置或删除,然后再次启动服务器。

在liferay 7中:我通过使用jdk将服务器的运行时环境从jre更改为jre,从而解决了这个错误

部署战争包到我们的服务器时,我得到这个错误。

我的部署命令是(应用的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 

我解决它与search可用的JDK,并安装一个。

 $yum search java | grep 'java-' $sudo yum install java-1.8.0-openjdk-devel.x86_64 

(注意-devel

我把这一行添加到eclipse文件夹中的“eclipse.ini”文件中。

-vm C:\ Program Files \ Java \ jdk1.8.0_131 \ bin \ javaw.exe

而且我也在eclipse中改变了JREpath

窗口 – >首选项 – > java – >已安装的JRE

并提供了达到jdk的path

C:\ Program Files \ Java \ jdk1.8.0_131

我在这个问题上花了很多时间,但结果很简单。 你所要做的就是:
在configuration服务器运行时时selectJDK而不是JRE!

它的工作就像一个冠军,我有这个问题与glassFish 4.0