Question

Je voudrais avoir le plugin maven eclipse régénérer mon .classpath chaque fois qu'une construction est exécuté, et je l'ai fait en utilisant la configuration suivante:

    <!--
        Generate a new .classpath each time the build is run, but don't try
        to download sources or javadocs
    -->
    <profile>
        <id>elipse-update</id>
        <activation>
            <file>
                <exists>.classpath</exists>
            </file>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-eclipse-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>generate-sources</phase>
                            <goals>
                                <goal>eclipse</goal>
                            </goals>
                            <configuration>
                                <downloadSources>false</downloadSources>
                                <downloadJavadocs>false</downloadJavadocs>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

Pour une raison quelconque, cela provoque le plugin jetée Maven pour échouer avec les erreurs de ClassNotFoundException (il se plaint de toutes sortes de cours de printemps ne pas être là). Bien sûr, cela a fonctionné sans succès quand je n'ai pas eu l'éclipse de plugin Maven installé. Voici un exemple de ce dont je parle:

$ mvn jetty:run
[INFO] Scanning for projects...
...
[INFO] Starting jetty 6.1.22 ...
2010-02-11 20:53:08.984:INFO::jetty-6.1.22
2010-02-11 20:53:09.109:WARN::Could not instantiate listener org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:195)
        at org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:255)
        at org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274)
        at org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)

Bien sûr, si je supprime cette section de plugin Eclipse, je peux courir jetée comme prévu:

$ mvn jetty:run
[INFO] Scanning for projects...
...
Feb 11, 2010 8:55:28 PM org.springframework.web.context.ContextLoader initWebApplicationContext
INFO: Root WebApplicationContext: initialization completed in 1672 ms
2010-02-11 20:55:28.687:INFO::Started SelectChannelConnector@0.0.0.0:8080
[INFO] Started Jetty Server
[INFO] Starting scanner at interval of 5 seconds.

Quelques choses que je sais:

  • Oui, j'Activable uniquement ce profil si le .classpath est présent. Cela semble contre-intuitif, mais j'ai une raison: j'ai un autre profil qui active lorsque le .classpath est absent qui exécute le plugin Eclipse avec les options pour le téléchargement de code source et javadocs la valeur true. Je ne veux pas que cela se produise chaque génération, donc je créé une configuration de plug-in séparé pour quand le classpath est déjà là.
  • Oui, je pourrais simplement créer des propriétés qui retenaient les valeurs des options que je souhaite changer au lieu de spécifier l'ensemble à nouveau config plugin. Dans ce cas, je voudrais juste définir une propriété eclipse.downloadSources true ou false en fonction de la présence du classpath et ont une définition unique de plug-in dans la section de construction régulière.

Un conseil? Ce problème est étrange.

Merci, LES

Était-ce utile?

La solution

Je soupçonne que le plug-in Eclipse Maven à désordre faire quelques Woodo classpath qui affecte plus tard le plugin jetée.

Mais pour être honnête, ce n'est pas un moyen très courant d'utiliser le plug-in Eclipse, du moins pas à ma connaissance. La plupart des gens ne comprennent pas dans leur construction, ils courent juste quand le POM a changé et cela ne se fait pas en général chaque construction. De plus, toucher le .classpath embrouille Eclipse si je me souviens bien et les forces d'une reconstruction propre du projet qui est assez ennuyeux.

Ainsi, à la fin, et je suis désolé, cela semble présenter plus contrariétés que d'avantages. Vous pouvez essayer d'ouvrir un Jira question bien.

Autres conseils

Vous ne voulez pas vraiment exécuter le maven-plugin Eclipse sur chaque build quand il y a un cadeau .classpath. Je ne peux pas vous dire exactement ce qu'il fait aux classpaths, mais ce n'est pas comment il est destiné à être utilisé. L'hypothèse est que lorsque vous l'exécutez vous exécutez seulement éclipse. Éclipse (ou un autre but)

Pourquoi voulez-vous garder re-exécuter?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top