Je sais que cette question a déjà été posée, mais je n’étais pas capable de la résoudre en utilisant des solutions d’autres postes. J'essaie de compiler une hiérarchie complexe de projets gwt en utilisant maven. Tout a bien fonctionné jusqu'à ce que je devais ajouter une autre bibliothèque, plus précisément: org.Eclipse.birt.runtime
Maintenant je reçois cette erreur:
[ERROR] Failed to execute goal org.codehaus.mojo:gwt-maven-plugin:2.6.1:debug ....
..... [Lots of jars, many containing birt, no duplicates though] .....
Error while executing process. Cannot run program "C:\Program Files\Java\jdk1.8.0_20\jre\bin\Java": CreateProcess error=206, The filename or extension is too long
La dépendance que j'utilise est:
<dependency>
<groupId>org.Eclipse.birt.runtime</groupId>
<artifactId>org.Eclipse.birt.runtime</artifactId>
<version>4.4.1</version>
</dependency>
J'ai finalement réussi à le résoudre:
Il s'avère que birt, avec ses dépendances, ajoutait simplement trop de bibliothèques et que le classpath devenait trop long pour que la commande windows puisse le gérer. De plus, les bibliothèques ont des noms stupidement longs.
Résolu en utilisant cette dépendance (je n'avais besoin que du runtime), j'ai créé les répertoires lib et birt et y ai moi-même placé le pot:
<dependency>
<groupId>org.Eclipse.birt.runtime</groupId>
<artifactId>org.Eclipse.birt.runtime</artifactId>
<version>4.4.1</version>
<scope>system</scope>
<systemPath>${basedir}/lib/birt/birt.runtime-4.4.1.jar</systemPath>
</dependency>
Birt n'a aucune raison d'être dans le classpath s'il n'est pas utilisé côté client.
Malheureusement, Maven rend parfois les choses plus difficiles que nécessaire; avec Maven, vous avez donc besoin que votre code client GWT soit un module Maven spécifique ne dépendant pas du code côté serveur; puis "fusionnez" tout dans un seul fichier WAR à l'aide de superpositions WAR.
Avec cette disposition (appelons les modules app-client
et app-server
), vous avez plusieurs solutions pour lancer gwt:run
ou gwt:debug
:
jamais essayé mais vous pourriez probablement configurer hostedWebapp
pour qu'il pointe vers votre répertoire de sortie app-server
:
<hostedWebapp>../app-server/target/app-server-${project.version}/</hostedWebapp>
Assurez-vous d’exécuter mvn clean
avant de compresser votre app-server
WAR afin de vous assurer que les fichiers JS générés proviennent de app-client
(en tant que recouvrement WAR) et non de app-server
(généré par gwt:run
).
ce que j'utilise dans gwt-maven-archetypes : lance le code côté serveur dans un conteneur de servlet distinct et utilise <noServer>true</noServer>
Assurez-vous également que vous exécutez mvn clean
avant le conditionnement, ou utilisez -Dgwt.compiler.force
, pour vous assurer que gwt:compile
ne traitera pas le fichier *.nocache.js
généré par DevMode comme à jour et recompilera l'application.