web-dev-qa-db-fra.com

Comment démarrer l'objectif de «compilation» de Maven lors de l'enregistrement dans Eclipse?

J'ai un projet Maven avec du code JavaScript. Il y a un plugin spécial de compilateur javascript connecté à l'objectif de compilation dans le pom.xml. Ainsi, lorsque je tape "mvn compile", les sources JavaScript dans src/main/javascript sont compilées (compressées et masquées) et enregistrées dans le répertoire target/classes. Sur la ligne de commande, cela fonctionne très bien.

Mais maintenant, je veux faciliter le développement en utilisant Eclipse avec le plugin m2Eclipse. Je veux qu'Eclipse appelle l'objectif de compilation chaque fois que je change un fichier JavaScript. Comment puis-je faire ceci? Lorsque j'enregistre un fichier JavaScript, je vois simplement une ligne de journalisation "AUTO_BUILD" dans la console maven et c'est tout.

Dans les préférences du projet, il est possible de configurer une cartographie du cycle de vie. Mais pour une raison quelconque, je ne peux ajouter que des objectifs personnalisés à "après nettoyage" et "sur ressource modifiée". Lorsque j'ajoute l'objectif "compiler" au mappage du cycle de vie "ressource modifiée", les fichiers JavaScript sont compilés lorsque je modifie une ressource. Je pourrais donc mettre mes fichiers JavaScript dans le dossier des ressources à la place et cela fonctionnerait, mais cela semble assez moche.

Cela fonctionne également lorsque je dis à Eclipse de "nettoyer" mon projet. Ensuite, l'objectif de compilation est appelé. Donc, la fonctionnalité est là, je veux juste l'exécuter lorsque j'enregistre un fichier JavaScript. Cela doit être possible d'une manière ou d'une autre?

Des indices?

26
kayahr

Dans les préférences du projet, il est possible de configurer une cartographie du cycle de vie. Mais pour une raison quelconque, je ne peux ajouter que des objectifs personnalisés à "après nettoyage" et "sur ressource modifiée". Lorsque j'ajoute l'objectif "compiler" au mappage du cycle de vie "ressource modifiée", les fichiers JavaScript sont compilés lorsque je modifie une ressource. Je pourrais donc mettre mes fichiers JavaScript dans le dossier des ressources à la place et cela fonctionnerait, mais cela semble assez moche.

Comme vous l'avez remarqué, les objectifs par défaut exécutés sur les versions incrémentielles dans Eclipse sont process-resources et resources:testResources. Personnellement, je ne trouve pas moche de mettre le fichier js sous les ressources et je lierais simplement le plugin javascript sur process-resources.

Cela fonctionne également lorsque je dis à Eclipse de "nettoyer" mon projet. Ensuite, l'objectif de compilation est appelé.

Sur la version complète (après un nettoyage d'Eclipse), les objectifs exécutés sont process-test-resources qui est en fait une phase de cycle de vie de construction qui inclut la phase compile, c'est pourquoi compile est appelé lorsque vous nettoyez votre projet d'Eclipse. Mais cela ne résout pas votre problème (exécuter votre plugin lors de la sauvegarde).


Comme je l'ai dit, je mettrais simplement le fichier js sous ressources. Mais il y a peut-être une autre option: ajouter un autre Builder au projet. Faites un clic droit sur votre projet, puis Propriétés> Constructeurs> Nouveau> Maven Build et définissez votre objectif de plugin comme objectif à exécuter pendant Objectifs de construction automatique (modifiez ou supprimez les autres objectifs en fonction de vos besoins):

texte alternatif http://img694.imageshack.us/img694/2382/screenshot003wo.png

Mais je préfère l'autre approche.

10
Pascal Thivent

puisque @ Pascal-thivent la réponse est obsolète (comme mentionné dans les commentaires) et suggérée par @akostadinov https://www.Eclipse.org/m2e/documentation/m2e-execution-not-covered.html :

Vous devez ajouter une action de cycle de vie maven valide

Exemple pour un jar qui est automatiquement déployé localement par maven install plugin:

<build>
    <!-- ... -->

    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.Eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>

                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>org.Apache.maven.plugins</groupId>
                                    <artifactId>maven-jar-plugin</artifactId>
                                    <versionRange>[2.0,)</versionRange>
                                    <goals>
                                        <goal>jar</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <execute>
                                        <runOnConfiguration>true</runOnConfiguration>
                                        <runOnIncremental>true</runOnIncremental>
                                    </execute>
                                </action>
                            </pluginExecution>

                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>org.Apache.maven.plugins</groupId>
                                    <artifactId>maven-install-plugin</artifactId>
                                    <versionRange>[2.5.0,)</versionRange>
                                    <goals>
                                        <goal>install</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <execute>
                                        <runOnConfiguration>true</runOnConfiguration>
                                        <runOnIncremental>true</runOnIncremental>
                                    </execute>
                                </action>
                            </pluginExecution>

                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

Astuce: se rapporte à Maven Project Builder est invoqué à chaque fois que je modifie un fichier source (GWT) et comme avertissement: l'installation inclut généralement des tests si vous les avez inclus dans votre cycle de construction maven normal

2
childno͡.de