web-dev-qa-db-fra.com

Comment faire en sorte que Eclipse et mvn appengine: devserver se parlent?

Je suis en train de passer de Google Plugin pour Eclipse à la version officielle de Google App Engine Maven Plugin . La dernière chose, j'espère, que je ne peux pas comprendre, c'est comment obtenir un bon flux de travail de débogage. Lorsque j'utilisais GPE, je venais de définir des points d'arrêt et le débogueur s'y arrêtait automatiquement, mais lorsque je lance le serveur de développement via mvn appengine:devserver, je ne pense pas que le serveur de développement et Eclipse se connaissent bien.

Comment puis-je les faire se parler?

30
antony.trupe

En gros, je suis les étapes @ developers.google.com/appengine/docs/Java/webtoolsplatform en faveur de ma méthode précédente.

0
antony.trupe

La première option consiste à configurer votre projet pour utiliser WTP, comme indiqué dans la documentation @ https://cloud.google.com/appengine/docs/Java/webtoolsplatform . C'est la méthode à laquelle je suis passée.

La deuxième option consiste à utiliser deux configurations de débogage. 

La première configuration de débogage exécutera votre cible maven, à savoir appengine:devserver. enter image description here

La seconde est une configuration Remote Java Application et connectera le client de débogage au devserver jvm.
enter image description here

Cela nécessite également que certains arguments de jvm soient passés au but maven. 

<!-- GAE plugin -->
<plugin>
    <groupId>com.google.appengine</groupId>
    <artifactId>appengine-maven-plugin</artifactId>
    <version>1.7.5-SNAPSHOT</version>
    <configuration>
        <jvmFlags>
            <jvmFlag>-Xdebug</jvmFlag>
            <jvmFlag>-Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=y
            </jvmFlag>
        </jvmFlags>
        <disableUpdateCheck>true</disableUpdateCheck>
    </configuration>
</plugin>

Une fois ces 3 éléments en place, lancez la configuration de débogage Maven, puis la configuration du client de débogage, puis exercez votre application.

Hotswap n'est pas encore pris en charge. Par conséquent, si vous modifiez des fichiers autres que des ressources (toute source Java), le devserver ne les verra pas. Les fichiers de ressources seront déployés (fichiers statiques: html, js).

45
antony.trupe

Cette question peut vous donner une idée du problème. Le moteur d'application Maven: devserver démarre le serveur de développement sur un processus séparé. Cependant, Eclipse est seulement conscient du processus Maven lui-même (c'est ce que vous voyez dans la vue de débogage). De plus, comme le serveur dev ne peut pas être démarré avec des arguments tels qu'un port de débogage, il ne pourra probablement jamais être connecté à un débogueur.

La question liée suggère qu’il existe un plugin non officiel Maven GAE qui prend des arguments. Il y a aussi un nouveau ticket pour améliorer le plugin officiel et une promesse du développeur du plugin d'implémenter cette fonctionnalité bientôt.

1
H-H

Vous devriez exécuter mvn à partir de Eclipse dans mode débogage .

enter image description here

Dans Eclipse, vous pouvez configurer ces commandes de construction maven à partir de la barre d'outils supérieure d'Eclipse "Exécuter" -> "Configuration de débogage" -> "Construction Maven"

Une fois que maven est lancé en mode débogage Eclipse, vous devriez pouvoir atteindre les points d'arrêt.

Edit - Une autre option consiste à configurer le débogage distant, à savoir "Exécuter" -> "Configuration de débogage" -> "Application Java distante" et à écouter le port de débogage distant Vous devez vous assurer que appengine: devserver se lance avec les arguments du port de débogage distant - Référence - Débogage distant dans Eclipse

1
SSR

Je vais voir ce que je peux faire d'autre pour faciliter l'intégration d'Eclipse, mais il existe maintenant une mise à jour du problème déposé dans le projet appengine-maven-plugin: http://code.google.com/p/appengine -maven-plugin/issues/detail? id = 3 & can = 1 alors jetez un oeil et voyez si le support des arguments jvm peut vous aider.

S'il vous plaît laissez-moi savoir vos expériences, je suis toujours en faveur de choses sont géniales.

1
MattStep

Réponse pertinente en 2015

J'ai créé un projet GAE (Java) en septembre 2015 et ce qui suit s'applique à ce projet et aux projets similaires.

J'ai commencé par créer mon projet comme sur un projet GAE maven ordinaire en utilisant l'archétype Skeleton en suivant simplement les étapes appropriées à partir de Utilisation d'Apache Maven - Java - Google Cloud Platform . Suivi de Conditions requises à Test de votre application avec le serveur de développement .

Après cela, j'ai importé ce projet dans Eclipse JEE (Mars) en utilisant "Importer un projet Maven existant". Développement commencé.

Lorsque j'avais besoin de déboguer, je n'avais qu'à exécuter les quelques étapes expliquées ci-dessous.

Créer une configuration de débogage

Allez dans Exécuter -> Configurations de débogage , cliquez sur application Java distante et créez une nouvelle configuration en cliquant sur le bouton Nouveau (voir la capture d'écran, coin supérieur gauche ci-dessus). filtre zone de texte).

 Create a new debug configuration for Remote Java Application

Renseignez les détails en choisissant votre projet et en attribuant un nom approprié à la configuration, comme indiqué ci-dessous (le port étant 8000), puis cliquez sur Apply :

 Settings for the debug configuration

Décommentez quelques lignes dans pom.xml

Dans le fichier pom.xml de votre projet, recherchez la configuration pour le plugin appengine-maven-plugin et supprimez les commentaires des lignes suivantes:

                <jvmFlags>
                    <jvmFlag>-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n</jvmFlag>
                </jvmFlags>

Exécutez la commande mvn appengine:devserver à partir de la ligne de commande

Comme le titre l'indique ...

Attachez le débogueur depuis Eclipse

Cliquez sur le petit triangle situé à côté du bouton Debug et choisissez le nom de la configuration de débogage que vous venez de configurer ("HelloWorldServlet" dans mon exemple).

0
markvgti