2009-05-11 11 views
12

Ich versuche GWT Hosted-Modus in Eclipse zu arbeiten, à la this HOWTO. Servlets funktionieren, wie meine GWT-Code tut, aber alle meine JSPs scheitern, weil mit Fehlern wie dem folgenden:GWT/Eclipse/Jetty Problem: Jasper kann Tag-Bibliotheken nicht auflösen

[WARN] /view/lniExecutiveSummary.htm 
org.apache.jasper.JasperException: /WEB-INF/jsp/lni/lniExecutiveSummary.jsp(1,1) The absolute uri: http://java.sun.com/jsp/jstl/fmt cannot be resolved in either web.xml or the jar files deployed with this application 
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39) 
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409) 
    [ trimmed ] 

Diese Webapp funktioniert gut, wenn unter Tomcat 5-fach im Einsatz; Ich kann es einfach nicht schaffen, die Taglibs aufzulösen, wenn ich in Eclipse laufe. Ich bin neu in Eclipse, und es funktioniert mit allen beweglichen Teilen, die für GWT + Maven benötigt werden, und zieht mir die Haare aus.

Aktualisieren: Ich benutze nicht mehr Eclipse; Ich bin (zurück!) Zu Intellij IDEA gewechselt. Also kann ich nicht ehrlich die Antworten bewerten, die du Leute gepostet hast. Sobald eine Abstimmungsaktion erfolgt oder jemand anderes Erfolg mit einer dieser Methoden meldet, akzeptiere ich die entsprechende Antwort. Vielen Dank.

+1

Kaum zu glauben, dass dies fast 7 Jahre später immer noch ein Problem ist. So viele Antworten auf SO für das Problem der JSTL-URIs im Allgemeinen, aber keine Lösung speziell für GWT & Jetty, die irgendwo tief, dunkel und nicht sehr offensichtlich versteckt sind, haben eine seltsame Abhängigkeit von alten JSTLs, die jeden Versuch, neuere zu importieren, vermasseln JSTL-Abhängigkeiten. (Sobald das GWT zum Beispiel auf Tomcat installiert ist, funktioniert alles.) Meine beste Hoffnung in diesem Stadium ist, dass jemand wie @BalusC anfangen wird, GWT zu machen (falls er das nicht schon tut) und endlich eine Lösung für dieses Problem veröffentlicht. :-P –

Antwort

1

Haben Sie versucht, die "jsf-api.jar" als "exportiert" in Ihrem Java-Projekt zu markieren? als exportierte
(wie in this thread erwähnt)

1.) Gehen Sie in den Java-Projekteigenschaften und markieren Sie die "jsf-api.jar". (project>properties>java build path>order and exports)
2.) Gehen Sie in den erweiterten globalen tomcat Vorlieben und fügen Sie Ihrem Projekt die tomcat Classpath (windows>preferences>tomcat>advanced>add projects to tomcat classpath)

Dann versuchen Sie es erneut Ihre Webapp unter Eclipse zu laufen.

Hier ist an article beschreibt das gleiche Verfahren/Setup, nicht für JSF aber Hudson (gleiche Problem though)

Man kann deutlich sehen, die beiden Schritte, die ich oben erwähnt:

http://wiki.hudson-ci.org/download/attachments/4161557/override.png

http://wiki.hudson-ci.org/download/attachments/4161557/otherTips.png

+1

Hmm, warum jsf? Wolltest du jstl sagen? Ich habe das schon als dep in meiner maven config, so sollte es schon auf dem classpath stehen. Aber ich werde fortfahren und versuchen, es manuell zum Build-Pfad hinzuzufügen. Vielen Dank. –

+1

JSTL ist mehr wie es :) Aber das allgemeine Prinzip, das in dieser Antwort beschrieben wird, steht noch. Also, hat es für deinen Fall funktioniert? – VonC

+1

Nein. Ich habe jstl bereits als Abhängigkeit über Maven gelistet; Es erscheint unter den Maven Deps auf der Registerkarte "Libraries" und ich habe "Maven Dependencies" auf der Registerkarte "Order and Export" markiert. Immer noch keine Freude. :-( –

1

Ich fühle deinen Schmerz. Ich habe denselben Schmerz durchgemacht und versucht, gwt, maven und eclipse zusammenzuarbeiten.

Ich konnte es mit Maven mit der folgenden pom.xml arbeiten. Auf diese Weise können Sie mvn gwt:run im gehosteten Modus ausführen, aber leider konnte ich nie das MVN-Ziel mvn gwt:eclipse für die Generierung einer Eclipse-Startlaufzeit Config zu arbeiten.

Hier sind die relevanten Schnipsel von meiner pom.xml. Beachten Sie, dass ich es einfacher gefunden habe, gwt an einem separaten Ort zu installieren, um mvn download gwt aus Repo zu verwenden. Der Ebenenbereich "System" in den MVN-Abhängigkeiten macht das möglich.

<properties> 

     <!-- convenience to define GWT version in one place --> 
     <gwt.version>1.7.1</gwt.version> 
     <google.webtoolkit.home>${env.GWT_HOME}</google.webtoolkit.home> 

     <!-- tell the compiler we can use 1.5 --> 
     <maven.compiler.source>1.6</maven.compiler.source> 
     <maven.compiler.target>1.6</maven.compiler.target>  

    </properties> 

    <dependencies> 

     <!-- GWT dependencies (from central repo) --> 
    <dependency> 
     <groupId>com.google.gwt</groupId> 
     <artifactId>gwt-servlet</artifactId> 
     <version>${gwt.version}</version> 
     <scope>system</scope> 
     <systemPath>${env.GWT_HOME}/gwt-servlet.jar</systemPath> 
    </dependency> 
    <dependency> 
     <groupId>com.google.gwt</groupId> 
     <artifactId>gwt-user</artifactId> 
     <version>${gwt.version}</version> 
     <scope>system</scope> 
     <systemPath>${env.GWT_HOME}/gwt-user.jar</systemPath> 
    </dependency> 

    ... other dependencies... 
    </dependencies> 

    <build> 
    <outputDirectory>war/WEB-INF/classes</outputDirectory> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>gwt-maven-plugin</artifactId> 
     <version>1.1</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>compile</goal> 
       <goal>generateAsync</goal> 
       <goal>test</goal> 
      </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <runTarget>com.gwt.example/Application.html</runTarget> 
      <extraJvmArgs>-Xmx512m</extraJvmArgs> 
     </configuration> 
     </plugin> 
     <!-- 
      If you want to use the target/web.xml file mergewebxml produces, 
      tell the war plugin to use it. 
      Also, exclude what you want from the final artifact here. 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <configuration> 
        <webXml>target/web.xml</webXml> 
        <warSourceExcludes>.gwt-tmp/**</warSourceExcludes> 
       </configuration> 
      </plugin> 
      --> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.0.2</version> 
      <configuration> 
      <source>${maven.compiler.source}</source> 
      <target>${maven.compiler.target}</target> 
      <module>com.gwt.example</module> 
      </configuration> 
     </plugin> 
    </plugins> 

    ...rest of pom.xml... 

Eine andere Technik, die ich Erfolg gehabt haben mit ist die Sonnenfinsternis google gwt plugin zu verwenden. Verwenden Sie einfach den Assistenten, um ein neues gwt-Projekt zu erstellen, stellen Sie sicher, dass Sie es aus Eclipse ausführen können, und ändern Sie dann mit Ihrem eigenen Code.

1

Diese Webanwendung funktioniert einwandfrei, wenn sie unter Tomcat 5x bereitgestellt wird. Ich kann es einfach nicht schaffen, die Taglibs aufzulösen, wenn ich in Eclipse laufe.Ich bin neu in Eclipse, und wenn ich es mit allen beweglichen Teilen, die für GWT + Maven benötigt werden, funktionieren lasse, zieht es mich aus.

Sie haben anscheinend die JSTL JAR-Datei (en) in Tomcat/lib statt WEB-INF/lib. Sie können dies auf mindestens drei Arten beheben:

  1. Verschieben/kopieren Sie die JSTL JAR-Datei (en) in WEB-INF/lib.
  2. Verschieben/kopieren Sie die JSTL JAR-Datei (en) in Tomcat/lib Ihres Entwicklungssystems.
  3. Ordnen Sie den richtigen Tomcat-Server mit den JSTL JAR-Dateien mit dem Webprojekt in Eclipse zu. Wenn noch nicht geschehen, fügen Sie den Tomcat-Server in der Ansicht Servers hinzu. Dann in Projekt gehen Eigenschaften Java Build Path>Bibliotheken>Bibliothek hinzufügen>Server Runtime> wählen Sie den Server in Frage.
1

Fügen Sie die Jar-Dateien im Eclipse-Projekt Classpath hinzu. wenn du diese Datei schon tomcat lib. Diese Option wird für Sie arbeiten. Die zweite Option ist add jar im Ordner Web-Inf lib, wenn Sie ein Eclipse-Webprojekt haben.

Verwandte Themen