Perché il Plug-in Eclipse Maven rompere il plugin Maven pontile?
-
20-09-2019 - |
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
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?