36

I'm trying to deploy a JSP-page on Jetty, using the Jetty WTP plugin for Eclipse. But I get the error below. It looks like Jetty can't find javac. Is there any settings I have to do for the Jetty WTP plugin in Eclipse or how do I fix this?

The JSP page works fine if I export my project as a .war-file to jetty\webapps and then start Jetty manually using java -jar start.jar. But it doesn't work if I deploy using the Jetty WTP plugin for Eclipse as described.

I have my JAVA_HOME set to C:\Program Files (x86)\Java\jdk1.7.0_01 and I use Jetty 8.0.4 on Windows 7.

Servlets is working fine with the current setup. Any suggestions on how to solve this for JSP pages?

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)
skaffman
  • 398,947
  • 96
  • 818
  • 769
Jonas
  • 121,568
  • 97
  • 310
  • 388

14 Answers14

41

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.

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

enter image description here

Jonas
  • 121,568
  • 97
  • 310
  • 388
  • 1
    Excellent feedback. +1. I keep my answer below for reference, even if it doesn't directly apply in your case. – VonC Feb 07 '12 at 19:03
  • for jetty 6 and below this would work, not for version above 6, it seems that jetty 6 + version cannot find the JDK for compiling jsp. – jsDebugger Oct 22 '12 at 17:13
  • 1
    @jsDebugger: if you look at the screenshot again, you see that this is for Jetty 8.1 – Jonas Oct 22 '12 at 17:56
  • 9
    For people using embedded Jetty and don't have a start.ini to edit, simply set this system property before you start your Jetty server: System.setProperty("org.apache.jasper.compiler.disablejsr199", "true"); – DiscDev Oct 31 '13 at 19:27
25

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.

Abdull
  • 26,371
  • 26
  • 130
  • 172
5

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

Peter Lamberg
  • 8,151
  • 3
  • 55
  • 69
4

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.

ydntn
  • 184
  • 3
3

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

  • Use the JDK and not the JRE
  • Set your JAVA_HOME

I am running on Windows by the way ...

Charestm
  • 68
  • 1
  • 6
3

I have the same problem. When I run where java, the output is:

C:\Windows\System32\java.exe

D:\Program Files\Java\jdk1.7.0_25\bin\java.exe

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.

Community
  • 1
  • 1
Michael
  • 1,667
  • 2
  • 17
  • 18
3

Strange because this thread suggests:

The solution was to install the package jdk7-openjdk.
Perhaps this should be added to the list of dependencies (or maybe for jetty, and not solr itself)?

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".

Community
  • 1
  • 1
VonC
  • 1,262,500
  • 529
  • 4,410
  • 5,250
  • But I use Jetty and Jetty don't have a `bin/asadmin`-file, and no `asenv.bat`. I have looked in some configurations files but haven't found anything about the JSP compiler. – Jonas Feb 02 '12 at 14:11
  • @Jonas ok, I have found another suggestion, this time for jetty, not glassfish ;) – VonC Feb 02 '12 at 14:15
  • I'm on Windows and `jdk7-openjdk` sounds like a Linux package. I use JDK7 on Windows (see my JAVA_HOME) and I think "Open JDK" is the default for Java 7. Anyway, thanks for all suggestions. – Jonas Feb 02 '12 at 14:24
  • @Jonas: a linux package: but openjdk is quite different from the Oracle distribution: http://openjdk.java.net/, And it is available on all OS included windows for openjdk7: http://stackoverflow.com/questions/5991508/openjdk-availability-for-windows-os, except the comment of that post (http://www.java7developer.com/blog/?p=55) seems to point out back to Oracle... – VonC Feb 02 '12 at 16:24
  • @Jonas: so my point was that your error might disappear if you use an openjdk instead of an Oracle JDK (even on Windows), but I haven't yet found that openjdk on the Oracle site. – VonC Feb 02 '12 at 16:25
  • I discovered that my JSP works fine if I export the project in a war file and deploy it externally. So it seem to be a problem with the Jetty WTP plugin for Eclipse that I'm using. – Jonas Feb 02 '12 at 16:32
  • @Jonas: interesting. If you figured it out completely, you can post an answer it (and accept it as the official one) – VonC Feb 02 '12 at 17:06
  • I haven't figured out it yet. Exporting as a war-file is clumsy. I filed a [bug](https://bugs.eclipse.org/bugs/show_bug.cgi?id=370508) to the Jetty WTP project, but it was closed immediately :( – Jonas Feb 03 '12 at 02:05
  • @Jonas: strange, they keep referring you to http://wiki.eclipse.org/Jetty/Howto/Configure_JSP... – VonC Feb 03 '12 at 05:07
2

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.

amichair
  • 4,073
  • 1
  • 21
  • 19
  • This also fixed my issue when running from the command line (Git Bash). Here's what it looked like for me: `$ where java`, `C:\ProgramData\Oracle\Java\javapath\java.exe`, `C:\Program Files\Java\jdk1.8.0_131\bin\java.exe` -- you can alternatively run the SECOND java (the JDK one) by launching `jetty` with it by specifying its full path, or using the `$JAVA_HOME` variable to get there if you've defined it. – Fuhrmanator Apr 25 '17 at 15:28
0

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:

where java

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.

Robert
  • 675
  • 8
  • 16
0

if you set environment variable JRE_HOME , please unset or delete it and start server again .

Deep Shah
  • 198
  • 2
  • 5
0

In liferay 7 : I got this error fixed by changing the runtime environment of the server from jre to jre with jdk

0

I got this error when deploy war package to our server.

My deploy command is (applied web container you may find):

java  -jar jetty-runner.jar  --port 8020 xx.war

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.

$ls /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64
jre

I fix it with searching available jdk and install one.

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

(Notice the -devel)

Junjie
  • 1,145
  • 3
  • 21
  • 37
0

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

-1

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

Tejucb
  • 184
  • 4