Frage

Ich möchte haben die Maven-Eclipse-Plugin Regenerat meine .classpath, wenn ein Build ausgeführt wird, und ich tat dies, indem Sie die folgende Konfiguration verwenden:

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

Aus irgendeinem Grund, verursacht dies das Maven Plugin Anlegesteg mit ClassNotFoundException Fehlern fehl (es beschwert sich über alle Arten von Spring classes ist es nicht). Natürlich funktionierte es ohne einen Treffer, wenn ich nicht die Maven-Eclipse-Plugin installiert haben. Hier ist ein Beispiel dafür, was ich spreche:

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

Natürlich, wenn ich den Eclipse-Plugin Abschnitt löschen, ich Anlegestelle laufen kann wie erwartet:

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

Einige Dinge, die ich kenne:

  • Ja, ich nur aktivieren, um dieses Profil, wenn die .classpath vorhanden ist. Dies erscheint unlogisch, aber ich habe einen Grund: Ich habe ein anderes Profil, das aktiviert wird, wenn die .classpath fehlt, die die Eclipse-Plugin mit den Optionen läuft für den Quellcode herunterladen und javadocs auf true gesetzt. Ich will das nicht jeden Build geschehen, so dass ich ein separates Plugin Config für erstellt, wenn der Classpath ist schon da.
  • Ja, ich konnte einfach Eigenschaften erstellen, die die Werte der Optionen gehalten Ich möchte stattdessen ändern, um die gesamte spezifizieren Plugin Config wieder. In diesem Fall würde ich nur eine eclipse.downloadSources Eigenschaft auf wahr oder falsch in Abhängigkeit von der Anwesenheit des Classpath und habe eine einzige Plugin Definition in dem regulären Build-Abschnitt festgelegt.

Jede Beratung? Dies ist ein seltsames Problem.

Danke, LES

War es hilfreich?

Lösung

Ich vermute, das Maven Eclipse-Plugin Chaos tun einige Classpath woodo, die die Anlegestelle später Plugin beeinflusst.

Aber um ehrlich zu sein, ist dies nicht eine sehr verbreitete Art und Weise die Eclipse-Plugin zu verwenden, zumindest mein Wissen nicht. Die meisten Menschen sind nicht in ihrem Körperbau, sie es nur ausgeführt, wenn der POM geändert hat und dies in der Regel nicht geschieht jeden zu bauen. Außerdem verwechselt die .classpath berühren Eclipse-wenn ich gut und Kräfte erinnern sauber a des Projekts wieder aufzubauen, die ziemlich ärgerlich.

So am Ende, und es tut mir leid für die, so scheint dies mehr Belästigungen als Nutzen einzuführen. Sie können versuchen, eine Jira Ausgabe zu öffnen.

Andere Tipps

Sie wollen wirklich nicht die Maven-Eclipse-Plugin auf jedem Build ausgeführt werden, wenn es eine .classpath vorhanden ist. Ich kann Ihnen nicht genau sagen, was es zu dem CLASSPATHs tut, aber das ist nicht, wie es verwendet werden soll. Die Annahme ist, dass, wenn Sie es starten Sie Eclipse laufen. Eclipse (oder ein anderes Ziel)

Warum wollen Sie wieder laufen halten?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top