Domanda

Mi piacerebbe avere l'esperto di Plug-in Eclipse rigenerare la mia .classpath ogni volta che si esegue una build, e l'ho fatto utilizzando la seguente configurazione:

    <!--
        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>

Per qualche ragione, questo fa sì che il pontile plug Maven a fallire con errori ClassNotFoundException (si lamenta su tutti i tipi di classi di primavera non esserci). Naturalmente, ha funzionato senza un colpo quando non ho avuto l'eclissi Maven plugin installato. Ecco un esempio di cosa sto parlando:

$ 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)

Naturalmente, se si elimina quella sezione Plug-in Eclipse, posso correre molo come previsto:

$ 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.

Alcune cose che conosco:

  • Sì, posso attivare solo questo profilo se il .classpath è presente. Questo sembra contro-intuitivo, ma ho una ragione: ho un altro profilo che si attiva quando la .classpath è assente, che gestisce il plugin Eclipse con le opzioni per il download del codice sorgente e javadocs impostate su true. Non voglio che questo accada ogni generazione, così ho creato una configurazione plug-in separato per quando il percorso di classe è già lì.
  • Sì, potrei semplicemente creare proprietà che tenevano i valori delle opzioni desidero cambiare invece di specificare ancora una volta l'intera configurazione plugin. In tal caso, vorrei solo impostare una proprietà eclipse.downloadSources true o false a seconda della presenza del classpath e hanno una definizione unica plug-in nella sezione accumulo regolare.

Qualche consiglio? Questo è un problema strano.

Grazie, LES

È stato utile?

Soluzione

Ho il sospetto che l'Eclipse Plugin Maven per pasticcio fare qualche Woodo classpath che colpisce il plugin pontile in seguito.

Ma ad essere onesti, questo non è un modo molto comune per usare il plugin Eclipse, almeno non che io sappia. La maggior parte delle persone non lo includono nel loro costruzione, hanno solo eseguito quando il POM è cambiato e questo in genere non capita tutti i build. Inoltre, toccando il .classpath confonde Eclipse se ricordo bene e le forze di una pulita ricostruzione del progetto che è piuttosto fastidioso.

Così, alla fine, e mi dispiace per questo, questo sembra introdurre più fastidi che vantaggi. Si può cercare di aprire una rel="nofollow Jira problema però.

Altri suggerimenti

È davvero non si vuole correre il maven-eclipse-plugin su ogni generazione quando c'è un .classpath presente. Non posso dirvi esattamente quello che fa ai percorsi di classe, ma questo non è come è destinato ad essere utilizzato. Il presupposto è che quando lo si esegue si esegue solo eclissi:. Eclipse (o qualche altro obiettivo)

Perché vuoi continuare a ri-farlo funzionare?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top