# Eclipse + Wildfly26 + primefaces11 + openjdk18



## MiHimbert (29. Mai 2022)

Hallo
wer hat eine Anleitung, die es mir ermöglicht die aktuelle Primefaces (11.0.0) mit Eclipse (2022-03) und dem Jakarta OpenJDK18 zu verbinden.  Ich brauche die WEB.xml und die notwendige pom.xml.
Ich sehe im Internet nur pom.xml Dateien,  die nach der Installation auf Eclipse abbrechen. Irgend eine Klasse fehlt dann immer.
Der Primefaces Showcase läuft bei mir auf dem Wildfly 26, aber der wird ohne die Eclipse gebaut. Dort kann ich gerne dann schauen welche xhtml und java Klassen ich bauen muss.


----------



## KonradN (29. Mai 2022)

Im Augenblick habe ich massive Probleme, Dich zu verstehen:
a) Jakarta OpenJDK 18? Was für ein OpenJDK kommt von Jakarta? Es gibt Jakarta EE und es gibt diverse Anbieter von OpenJDKs. Aber ein Jakarta OpenJDK kenne ich nicht.
b) Ich verstehe Dein Problem nicht. Da Du eine pom.xml haben willst, nutzt Du also Maven. Die Anleitung, die Du brauchst, ist dann also einfach das Getting Started von PrimeFaces. Ein funktionierendes Maven Projekt wirst Du dann auch in Eclipse öffnen können.
c) Du hast - so ich Dich richtig verstanden habe - doch ein Maven Projekt das auch auf deinem WildFly läuft. Dieses Projekt wirst Du auch in Eclipse öffnen können. 

Daher wäre es evtl. hilfreich, wenn Du einmal erläuterst, was Du genau versuchst und was für Fehlermeldungen du bekommst! Vermutlich versuchst Du ein Maven Projekt 1:1 ohne Maven in Eclipse nachzubauen - Wenn das richtig ist, dann kann man da gerne auch unterstützen, aber dann brauchen wir wirklich die Details.


----------



## Oneixee5 (29. Mai 2022)

Laut Doku sind weder Wildfly noch Primefaces für Java 18 ausgelegt. Eclipse ist "nur" eine IDE, also unterstützt die Programmierung. Eclipse sollte also zur Laufzeit keine Rolle spielen.


----------



## MiHimbert (29. Mai 2022)

openjdk = https://openjdk.java.net/projects/jdk/18/ 
    IMPLEMENTOR="Oracle Corporation" JAVA_VERSION="18.0.1.1" JAVA_VERSION_DATE="2022-04-22"
maven mit dem dependency 
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>11.0.0</version>
        </dependency>
ich habe kein Maven Projekt geladen sondern mir die Eclipse mit einem neuen Web Projekt geöffnet.


----------



## MiHimbert (29. Mai 2022)

Auf welche java Version ist die primefaces 11.0.0 denn ausgelegt? Der Showcase von primefaces läuft bei mir unter wildfly 26 und java 17


----------



## Oneixee5 (29. Mai 2022)

MiHimbert hat gesagt.:


> Auf welche java Version ist die primefaces 11.0.0 denn ausgelegt?


RTFM - Updated to work under JDK LTS 8, 11, and 17


----------



## KonradN (29. Mai 2022)

MiHimbert hat gesagt.:


> maven mit dem dependency





MiHimbert hat gesagt.:


> habe kein Maven Projekt geladen


Also was denn nun? Maven oder kein Maven? Die Aussagen widersprechen sich doch oder verstehe ich Dich da falsch?



MiHimbert hat gesagt.:


> Der Showcase von primefaces läuft bei mir unter wildfly 26 und java 17


WildFly hat mit Version 25 auch Java 17 unterstützt. Wobei es vermutlich auch problemlos mit Java 18 laufen wird - das würde ich aber in Produktion nicht nutzen. Und das wird da auch ähnlich gesehen:





						WildFly 26.1 is released!
					

WildFly 26.1.0.Final is now available for download




					www.wildfly.org
				





> While we recommend using an LTS JDK release, I do believe WildFly runs well on JDK 18. By runs well, I mean the main WildFly testsuite runs with no more than a few failures in areas not expected to be commonly used. We want developers who are trying to evaluate what a newer JVM means for their applications to be able to look to WildFly as a useful development platform. Note that we make no attempt to ensure the projects producing the various libraries we integrate are testing their libraries on JDK 18.



Daher ist das erst einmal nicht zwingend ein K.O. Grund. Aber irgendwie scheitere ich schon daran, die eigentliche Problematik wirklich zu verstehen.


----------



## MiHimbert (29. Mai 2022)

ich will nur einfach ein eclipse projekt mit folgenden Komponenten:

maven damit ich mir die notwendigen JAR Files ziehen kann
Maven damit er mir das war File erstellt
primefaces 11.0.0 damit ich die neue Version benutzen kann.
die möglichst neueste Version vom JAVA JDK,  möglichst in der OPENJDK Version 

installieren tue ich es auf dem wildfly 26 , der bei mir unter JAVA Version 17 läuft.


----------



## Oneixee5 (29. Mai 2022)

Ein WAR-Archiv, welches unter Java 18 erstellt wurde wird vermutlich nicht auf einem Server unter Java 17 funktionieren. Es gibt da zwar Optionen, die das ermöglichen würden, man darf aber trotzdem keine Teile der 18er API verwenden.


----------



## Oneixee5 (29. Mai 2022)

Ich glaube das hier: https://howtodoinjava.com/maven/maven-web-project-in-eclipse/ ist sinnvoll


----------



## MiHimbert (29. Mai 2022)

Der link ist leider veraltet. Hier wird noch mit jsp gearbeitet. Ich werde versuchen es auf primefaces jsf umzuarbeiten.


----------



## Oneixee5 (29. Mai 2022)

Die index.jsp ist nur zum Test/Start. Die kann man löschen.


----------



## MiHimbert (29. Mai 2022)

schade mit dem Tipp komme ich auch in den Wald


----------



## KonradN (29. Mai 2022)

Also wenn Du ein Primefaces Projekt haben willst, das Dir sogar aufzeigt, was Primefaces so alles zu bieten hat, dann kannst du primefaces-showcase anschauen. Kommt als Maven Projekt, baut ein WAR. (https://github.com/primefaces/primefaces)

Im Augenblick finde ich aber immer noch keinerlei konkrete Probleme. Nur ganz allgemeines "irgend eine Klasse fehlt", "komme ich auch in den Wald", ...

Da kann man nicht wirklich helfen. Woran scheitert es? Scheitert es schon am Verständnis von Maven? Oder am JSF? Primefaces setzt da ja nur auf und wird einfach im Maven Projekt hinzu genommen als Dependency oder das jar File wird einfach eingebunden, wenn man nicht mit Maven arbeiten sollte.

Sorry, wenn ich irgendwas übersehen haben sollte oder schlich Dich einfach nur missverstehe.


----------



## mihe7 (29. Mai 2022)

MiHimbert hat gesagt.:


> ich will nur einfach ein eclipse projekt mit folgenden Komponenten:
> 
> maven damit ich mir die notwendigen JAR Files ziehen kann
> Maven damit er mir das war File erstellt
> ...


Ich würde mir einfach ein Maven-Projekt erstellen und die POM anpassen. Je nach Maven-Version musst Du ggf. das Compiler-Plugin/War-Plugin explizit angeben, um die benötigten Versionen zu erhalten. Ansonsten sollte die Abhängigkeit zu Primefaces und zur Jakarta EE API doch reichen.

Zum letzten Punkt: der Versuch, eine mit JDK 18 kompilierte Klasse mit einem Java 17 Runtime zu laden, dürfte mit einem "Unsupported class file major version 62" quittiert werden. (s. #9 von @Oneixee5), sofern Du als source- und target-Version nicht höchstens die 17 angegeben hast.


----------



## MiHimbert (30. Mai 2022)

Ja danke die primefaces Showcase Applikation habe ich unter wildfly laufen.  Toll was die heute liefern können.
Nun wollte ich aber nicht so eine große pom.xml aufbauen. Ich wollte als ersten Test nur eine Dependency von primeface und zwei java Klassen und eine xhtml ausprobieren, bevor ich das Projekt weiterentwickle.

der Buildpath enthält die OPENJDK 17 
Hier meine pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>de.himit</groupId>
    <artifactId>fischerApp</artifactId>
    <version>0.0.1</version>
    <packaging>war</packaging>

    <name>fischerApp</name>
    <url>https://github.com/datenmuehle/java11-jsf-primefaces-archetype</url>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>jakarta.faces</artifactId>
            <version>2.3.17</version>
        </dependency>
        <!-- Unit testing -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>
        <!-- primefaces components -->
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>11.0.0</version>
            <classifier>jakarta</classifier>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.10.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.2</version>
                <configuration>
                    <webResources>
                        <resource>
                            <filtering>true</filtering>
                            <directory>src/main/webapp</directory>
                            <includes>
                                <include>**/web.xml</include>
                            </includes>
                        </resource>
                    </webResources>
                    <warSourceDirectory>src/main/webapp</warSourceDirectory>
                    <webXml>${project.build.directory}/web.xml</webXml>

                </configuration>
            </plugin>

        </plugins>


    </build>

</project>

der folgende Fehler tritt auf:
*20:45:47,432 WARN  [org.jboss.modules.define] (Weld Thread Pool -- 5) Failed to define class javax.faces.webapp.FacetTag in Module "deployment.fischerApp-0.0.1.war" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link javax/faces/webapp/FacetTag (Module "deployment.fischerApp-0.0.1.war" from Service Module Loader): javax/servlet/jsp/tagext/TagSupport*

hier die web.xml
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>*jakarta*.faces.webapp.FacesServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
  </welcome-file-list>

</web-app>

die beans.xml und die faces.config.xml sind bis auf die notwendigen Bezüge leer. 

ändere ich den obigen Eintrag von jakarta auf javax ab, so kommt folgende Meldung:

* Failed to define class javax.faces.webapp.FacesServlet in Module "deployment.fischerApp-0.0.1.war" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link javax/faces/webapp/FacesServlet (Module "deployment.fischerApp-0.0.1.war" from Service Module Loader): javax/servlet/Servlet*

Obwohl die javax/faces/webapp/FacesServlet in der glassfish jar enthalten ist. die habe deshalb extra in der pom angegeben.


----------



## KonradN (30. Mai 2022)

Öhm, Du nutzt Wildfly 26 und damit Jakarta EE 9.1 und auch kompatibel zu EE 8 aber du versuchst es mit dem jakarta.faces 2.3 laufen zu lassen? Das dürfte noch EE 7 sein.

Daher ist wohl eher angebracht, jakarta.faces in Version 3.0.2 oder 4.0-M1 zu verwenden damit da auch ein EE Standard verwendet wird, der passt.

Bei Java/Jakarta EE sollte man sich nach einem Standard richten und nur Dinge nutzen, die kompatibel zu eben genau diesem sind.


----------



## mihe7 (30. Mai 2022)

JSF ist für mich eine API, die inkl. Implementierung vom Application Server zur Verfügung gestellt wird. 

Bei mir enthält die POM nur die Abhängigkeit zur Java EE API mit dem Scope "provided", damit die nicht mitgepackt wird. Dann noch Primefaces obendrauf und das wars (wobei mir gerade auffällt, dass man eigentlich auch PF über den AS zur Verfügung stellen können müsste; das würde die WAR wesentlich verkleinern).


----------



## MiHimbert (30. Mai 2022)

Danke das war die Lösung:
hier nochmal die korrigierte POM:


----------



## MiHimbert (30. Mai 2022)

ich musste noch eine Dependency hinzufügen. 


```
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>de.himit</groupId>
    <artifactId>fischerApp</artifactId>
    <version>0.0.1</version>
    <packaging>war</packaging>

    <name>fischerApp</name>
    <url>https://github.com/datenmuehle/java11-jsf-primefaces-archetype</url>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.glassfish/jakarta.faces -->
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>jakarta.faces</artifactId>
            <version>4.0.0-M1</version>
            <!-- <scope>provided</scope> -->
        </dependency>

        <!-- Unit testing -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>
        <!-- primefaces components -->
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>11.0.0</version>
            <classifier>jakarta</classifier>
            <!-- <scope>provided</scope>-->
        </dependency>

        <!-- https://mvnrepository.com/artifact/jakarta.platform/jakarta.jakartaee-web-api -->
        <dependency>
            <groupId>jakarta.platform</groupId>
            <artifactId>jakarta.jakartaee-web-api</artifactId>
            <version>9.1.0</version>
            <scope>provided</scope>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.10.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.2</version>
                <configuration>
                    <webResources>
                        <resource>
                            <filtering>true</filtering>
                            <directory>src/main/webapp</directory>
                            <includes>
                                <include>**/web.xml</include>
                            </includes>
                        </resource>
                    </webResources>
                    <warSourceDirectory>src/main/webapp</warSourceDirectory>
                    <webXml>${project.build.directory}/web.xml</webXml>

                </configuration>
            </plugin>

        </plugins>


    </build>

</project>
```


----------



## mihe7 (30. Mai 2022)

Die jakarta.faces-Dependency dürftest Du rauswerfen können.


----------



## MiHimbert (30. Mai 2022)

ich darf die POM.xml nicht kürzen, wie mihe7 meinte. Ich habe es ausprobiert und es kamen die diverse Abbrüche nach dem Deployen bzw. dem anschließenden Test. 

Danke für alle die mitgeholfen haben.


----------



## mihe7 (30. Mai 2022)

MiHimbert hat gesagt.:


> ich darf die POM.xml nicht kürzen, wie mihe7 meinte. Ich habe es ausprobiert und es kamen die diverse Abbrüche nach dem Deployen bzw. dem anschließenden Test.


Danke für die Info. Ist ja auch ok, wenn es so funktioniert.

Das sind nur theoretische Überlegungen: mich wundert es, als dass die Implementierung vom AS zur Verfügung gestellt werden und die API im Web-Profile enthalten sein müsste. Eine mögliche Erklärung wären die angesprochenen Tests: dann sollte aber der test-Scope reichen. Wenn ich endlich irgendwann mal dazukomme, unsere Projekte auf Jakarta hochzuziehen, werde ich mir das mal genauer ansehen


----------

