“PWC6345:调用 javac 时出错。”使用 Jetty WTP 插件在 Jetty 上部署 JSP 页面时出错
我正在尝试使用 Eclipse 的 Jetty WTP 插件 在 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。Servlet
工作正常使用当前设置。关于如何解决 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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(14)
正如 Jan Bartel 所建议的,来自 Jetty:如何配置 JSP:
通过在
start 中添加以下行.ini
-Eclipse 中的文件,它工作正常。As Jan Bartel suggested, from Jetty: How to configure JSP:
by adding the line below in the
start.ini
-file in Eclipse, it works fine.我也碰巧在我的 Eclipse 安装和 Jetty Maven 插件(我用它从 Eclipse 中启动 Jetty)中突然得到了
org.apache.jasper.JasperException: PWC6345
)。原因是我不久前更新了 JDK 安装。在 Eclipse 内部,这会导致“已安装的 JRE”更改为指向普通的 JRE 安装,而不是完整的 JDK 安装。 Jasper 需要安装 JDK,因为 Jasper 需要 javac(JRE 不提供)。
就我而言,解决方案是为 Eclipse 提供 JDK 安装。为此,请选择窗口 ->首选项-> Java->安装的 JRE。在这里,单击添加...,然后指向您的 JDK 安装(在我的例子中,JRE home 应指向
C:\Program Files (x86)\Java\jdk1.7.0_17
)。单击完成。然后返回已安装的 JRE 概览,删除旧的 JRE 引用并选择新增JDK安装。I too happened to suddenly get the
org.apache.jasper.JasperException: PWC6345
with my Eclipse installation and the Jetty Maven Plugin (which I use to start up Jetty from within Eclipse).The reason was that I updated my JDK installation shortly before. Inside Eclipse, this caused to change the "Installed JRE" to point to a plain JRE installation instead of a full-fledged JDK installation. A JDK installation is needed for Jasper, as Jasper needs
javac
(which is not provided by JRE).In my case, the solution was to provide Eclipse with the JDK installation. To do so, select Window -> Preferences -> Java -> Installed JREs. Here, click Add..., then point to your JDK installation (in my case, JRE home should point to
C:\Program Files (x86)\Java\jdk1.7.0_17
). Click Finish. Then back in the Installed JREs overview, remove the old JRE reference and select the newly added JDK installation.使用 Run-Jetty-Run 插件运行 Web 应用程序时,出现 PWC6345 错误。
修复方法是更改首选项中的执行环境设置。
由于我使用的是 java 7,因此我需要更改 JavaSE-1.7 的设置。
其他执行环境可能会有类似的行为。
窗口->首选项-> Java->安装的 JRE ->执行环境
左侧选择JavaSE-1.7 ->选择右侧的 *jdk*1.7.x_xx
I got the PWC6345 error when running a webapp with Run-Jetty-Run plugin.
The fix was to change the Execution environments settings in Preferences.
Since I'm using java 7 I needed to change the setting for JavaSE-1.7.
Probably other execution environments will behave similarly.
Window -> Preferences -> Java -> Installed JREs -> Execution environments
Select JavaSE-1.7 on the left -> pick the *jdk*1.7.x_xx on the right hand side
好的,经过大量搜索后解决了这个问题。
下载任意一个jdk,并将JAVA_HOME指向该jdk。
在此 jdk 文件夹中,您将找到 ./bin 和 ./jre/bin
从 ./bin 复制 javac 并将其粘贴到 ./jre/bin [记住复制而不是剪切]
现在在 eclipse 中,Run->External-Tools->External-Tools-Configurations,选择在左侧窗格中找到项目的 build.xml,然后单击右侧窗格中的 JRE 选项卡。
单击已安装的JRE并添加上一步中的jdk。
完成后,选择这个新的 JRE (jdk1.6.0_31) 作为“单独的 JRE”,单击底部的“应用”并运行。
这假设您正在 eclipse 上使用 ant 执行 jetty:run 。
Ok, solved this after a lot of searching around.
Download any jdk and point JAVA_HOME to this jdk.
Inside this jdk folder you will find ./bin and ./jre/bin
Copy the javac from ./bin and paste it in ./jre/bin [remember copy not cut]
Now in eclipse, Run->External-Tools->External-Tools-Configurations, select the build.xml for of your project in the left pane and click on the JRE tab in the right pane.
Click on installed JREs and add the jdk in the previous step.
Once done, select this new JRE (jdk1.6.0_31) as the 'Separate JRE', click on apply at the bottom and run.
This assumes you are doing a jetty:run using ant on eclipse.
奇怪的是,因为 此帖子 建议:
但这在 Windows 上没有多大帮助,因为 openjdk7 的二进制文件不容易获得。
(在“Windows 操作系统的 OpenJDK 可用性”评论中,eckes 提到发现了一些适用于 Windows 的 openjdk 二进制文件,作为 构建 b146 但是,不再维护所述版本)
错误报告 由 OP Jonas 通过对 Eclipse wiki 页面“Jetty/Howto/Configure JSP”。
Strange because this thread suggests:
But that doesn't help much on Windows, where the binary for openjdk7 aren't easily available.
(In "OpenJDK availability for Windows OS" comments, eckes mentions having found some openjdk binaries for Windows, as part of the Build b146. However, said releases aren't maintained any more)
The bug report filled by the OP Jonas is closed with a simple reference to the Eclipse wiki page "Jetty/Howto/Configure JSP".
你们有植物解决方案,但我认为它存在比修复 start.ini 更好的解决方案
我遇到了同样的问题,然后我意识到这可能是因为我确实有 64 位的 JDK7,而我应该有 32 位的 JDK7。
所以我通过下载并使用 JDK7 for 32Bit 解决了我的问题。
另外,您仍然需要
顺便说一句,我在 Windows 上运行...
You have planty solutions guys but I thought that it exist a solution better than fix the start.ini
I lived the same problem and then I realize that it may be because I did have a JDK7 for 64bit while I should have a JDK7 for 32.
So I fixed my problem by downloading and use the JDK7 for 32Bit.
Also, you would still need to
I am running on Windows by the way ...
我有同样的问题。当我运行
where java
时,输出为:当然第一个是不正确的。所以我的问题出在 PATH 上。我可以通过删除目录 C:\Windows\System32\ 中的 java.exe 来纠正此问题,因为我确信它没有用,或者将第二个条目放在第一个条目的前面。
所以遇到这个问题时,请检查你的jdk的PATH。我希望我的问题和解决方案在某种程度上有所帮助。
I have the same problem. When I run
where java
, the output is:Of course the first one is incorrect. So my problem lies in the PATH. I can rectify this by either removing the java.exe in the directory C:\Windows\System32\ because I'm sure it's useless, or putting the second entry in front of the first one.
So When encountering this problem, please check your PATH for the jdk. I hope that my problem and my solution is helpful in some way.
当我使用 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”)放在其他系统路径之前的路径上可以解决此问题。
I got the PWC6345 error when running jetty-runner 9.2.1 standalone from Windows 7 cmd (or batch file) with Oracle JDK 1.7.0_60, and none of the other suggestions in this or other forums worked. I'll leave my workaround here, in case it helps someone...
After installing the JDK, running 'where java' showed two different java.exe paths, the first being in the Windows system folder, and the second in the JDK folder (which is the one I added to the path manually). Both of these are actually installed by the same JDK installer. The java.exe in the system folder was taking precedence and causing the full JDK to go undetected.
Placing the JDK bin folder (e.g. "C:\Program Files\java\jdk1.7.0_60\bin") on the path before the other system paths fixed the issue.
除了更新 JAVA_HOME(见上文)...
如果您在命令行中遇到此错误(例如从 dos 窗口启动 Jetty 服务器),请检查 Windows 在哪里找到 java.exe:
如果 Windows 返回显示您的 jre 的路径,则检查您的 PATH。 %PATH% 可能包含指向 jre 而不是 jdk 的路径。
In addition to updating the JAVA_HOME (see above)...
If you're encountering this error from command line (e.g. starting Jetty server from dos window), check where windows is finding the java.exe:
If windows comes back with a path showing to your jre, then check your PATH. Chances are the %PATH% contains a path pointing to the jre instead of jdk.
如果您设置了环境变量
JRE_HOME
,请取消设置或删除它并再次启动服务器。
if you set environment variable
JRE_HOME
, please unset or delete itand start server again .
在liferay 7中:我通过将服务器的运行时环境从jre更改为jdk的jre来修复此错误
In liferay 7 : I got this error fixed by changing the runtime environment of the server from jre to jre with jdk
在将 war 包部署到我们的服务器时出现此错误。
我的部署命令是(您可能会找到的应用的 Web 容器):
我写这个答案是因为它几乎有一天让我感到困惑。我尝试了上面的一些方法但失败了。
最后我发现我的服务器上只有jre,但没有完整的jdk。
我通过搜索可用的jdk并安装一个来修复它。
(注意
-devel
)I got this error when deploy war package to our server.
My deploy command is (applied web container you may find):
I write this answer because it confused me almost one day. I tried some methods above but failed.
Finally I found there is only jre on my servers but not full jdk.
I fix it with searching available jdk and install one.
(Notice the
-devel
)我将此行添加到 eclipse 文件夹中存在的“eclipse.ini”文件中。
-vm
C:\Program Files\Java\jdk1.8.0_131\bin\javaw.exe
我还更改了 eclipse
windows 中的 JRE 路径 ->偏好-> java->安装的 JRE
并提供了 jdk
C:\Program Files\Java\jdk1.8.0_131的路径
I added this line to 'eclipse.ini' file which is present inside eclipse folder.
-vm
C:\Program Files\Java\jdk1.8.0_131\bin\javaw.exe
and I also change the JRE path in eclipse
windows -> preferences -> java -> Installed JREs
and provided path upto jdk
C:\Program Files\Java\jdk1.8.0_131
我在这个问题上花了很多时间,但事实证明它非常简单。您所要做的就是:
配置服务器运行时时选择 JDK 而不是 JRE!
它工作得很好,我在使用 glassFish 4.0 时遇到了这个问题
I spent good amount of time on this issue, but it turned out to be very simple. All you have to do is:
choose the JDK instead of JRE while configuring the server runtime!
It worked like a champ, I had this issue with glassFish 4.0