Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
ich verzweifle gerade an einem Problem, da ich absolut keinen Grund für die Ursache ausmachen kann. Und zwar geht es darum eine größere WebApplication (mit JSF2 fürs Frontend) zu deployen. Entwickelt wurde das ganze in Eclipse und zum Testen bisher auf das m2e Plugin zurückgegriffen. Funktioneiert soweit alles wunderbar.
Wenn ich jetzt das Projekt allerdings ohne Eclipse mit maven erstellen lasse, also mit mvn package, so kommt es zu folgendem Problem:
Das builden funktioniert einwandfrei und das hochfahren im Tomcat (Version 7) auch. Sobald man allerdings im Browser die erste Seite mit JSF EL Expressions ansurft kommt es zu Problemen, weil diese scheinbar nicht ausgewertet werden und immer nur null returnen (für das auflösen der el selbst gibt es leider keine Exception, erst durch die Folgen der erhaltenen null Werte). Für die El-Expressions wird jboss-ek 2.0.1.GA verwendet.
Zusätzliche Details:
Wenn ich den Output vom Maven Build mit einem von Eclipse exportierten war File vergleiche, so sind in beiden war Files alle Dateien vorhanden. Allerdings unterscheidet sich die Größe der Class Files stets um ein paar Bytes (die Files die mit Eclipse erstellt wurden sind in der Regel etwas größer).
Wenn ich die von Eclipse erstellte Version nicht in Eclipse direkt deploye, sondern per Tomcat, so funktioneirt es auch. Ergo müsste der Fehler eigentlich in den Class Files liegen, die sich um ein paar Bytes unterscheiden.
Ich quäle mich damit jetzt schon ein paar Tage herum und finde einfach nichts. Hat jemand eine Idee?
Allerdings unterscheidet sich die Größe der Class Files stets um ein paar Bytes (die Files die mit Eclipse erstellt wurden sind in der Regel etwas größer).
Das sollte nicht das Problem sein. Eclipse ist i.d.R so eingestellt, dass es einige für's Debugging nützliche Metainformationen in die class-Files reinkompiliert (z.B. Zeilennummern). In Produktionscode sind diese Metainformationen unerwünscht und werden deswegen bei einem "normalen" Compile nicht in die class-Files reinkompiliert.
Da es wie gesagt ein größeres Projekt ist das nicht eines, sondern gleich mehrere. Ich versuche mal die esentiellen Teile zu posten, die etwas damit zu tun haben könnten.
Die eigentlich Web Application:
[XML]
<dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
[/XML]
Naja, was mir hier natürlich auffällt ist, dass 2 verschiedene Libraries für die EL verwendet wird (hab das Projekt nicht alleine erstellt, weiß also leider gerade nicht wieso eigentlich). Die Jboss Variante vermutlich dafür um Kombatibilität zu Tomcat 6 zu erreichen und die javac el-api kann ich leider nicht einfach entfernen und durch die jboss api ersetzen weil an manchen stellen zum kompilieren die javax Variante benötigt wird. Das sollte ja aber eigentlich hoffentlich auch nicht die Ursache sein, oder?
Hmm, habe etwas länger über Deiner POM gegrübelt, um herauszufinden, was damit erreicht werden sollte. Zu dem hier:
[XML]
<dependency>
<groupId>org.jboss.el</groupId>
<artifactId>jboss-el</artifactId>
<version>2.0.1.GA</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
</exclusion>
</exclusions>
</dependency>
[/XML]
habe ich das gefunden: JSFAtWork, JSF 2.0 und Apache MyFaces
Es ist also eine Konfiguration, bei der eine ältere Version (1.0) der jvax.el-API verwendet wird (weil der Server nicht mehr hergibt), aber in der Implementierung dennoch neuere Features unterstützt werden. Deine Vermutung über den Teil ist also richtig.
Die von jboss-el referenzierte el-api version (1.0) steht jetzt im Widerspruch zu der vom Container inzwischen bereitgestellten (bei Tomcat 6: 2.1, bei Tomcat 7: 2.2 --> Du verwendest also wohl Tomcat 7?). Das würde ich tatsächlich für die Fehlerursache halten. Ich halte die jboss-el-Dependency für überflüssig. Entferne sie.
Die von jboss-el referenzierte el-api version (1.0) steht jetzt im Widerspruch zu der vom Container inzwischen bereitgestellten (bei Tomcat 6: 2.1, bei Tomcat 7: 2.2 --> Du verwendest also wohl Tomcat 7?). Das würde ich tatsächlich für die Fehlerursache halten. Ich halte die jboss-el-Dependency für überflüssig. Entferne sie.
Ich habe sie jetzt entfernt, das Problem bleibt leider. Es wäre mir aber auch unverständlich gewesen wenn es dadurch jetzt geklappt hat, da Eclipse ja auch auf die selbe Tomcat Version zurück greift und es somit zu dem selben Problem kommen müsste.
Wie gesagt, der Tomcat hat die für EL nötigen jars dabei (unter server/lib/: el-api.jar: EL 2.2 API, jasper-el.jar_Tomcat Jasper EL implementation). Die Fehlermeldungen im Internet, die Dein Fehlerbild beschreiben, laufen immer darauf hinaus, dass irgendwo konkurrierende el-jars deployt sind. Also checke nochmal server/lib/ und WEB-INF/lib. Ansonsten, den ganzen Kram, den man machen muss, um EL zu aktivieren hast Du ja oder?