Почему плагин maven eclipse нарушает работу плагина maven jetty?

StackOverflow https://stackoverflow.com/questions/2249202

Вопрос

Я хотел бы, чтобы плагин maven eclipse восстанавливал my .classpath при каждом запуске сборки, и я сделал это, используя следующую конфигурацию:

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

По какой-то причине это приводит к сбою плагина maven jetty с ошибками ClassNotFoundException (он жалуется на отсутствие всех видов классов Spring).Конечно, это работало без сбоев, когда у меня не был установлен плагин maven eclipse.Вот пример того, о чем я говорю:

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

Конечно, если я удалю этот раздел плагина eclipse, я смогу запустить jetty, как и ожидалось:

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

Кое-что я знаю:

  • Да, я активирую этот профиль только в том случае, если указан путь к классу .Это кажется нелогичным, но у меня есть причина:У меня есть другой профиль, который активируется, когда отсутствует .classpath, который запускает плагин eclipse с параметрами загрузки исходного кода и javadocs, установленными в true.Я не хочу, чтобы это происходило при каждой сборке, поэтому я создал отдельную конфигурацию плагина для случаев, когда путь к классу уже есть.
  • Да, я мог бы просто создать свойства, содержащие значения параметров, которые я хочу изменить, вместо того, чтобы заново указывать всю конфигурацию плагина.В этом случае я бы просто установил для свойства eclipse.downloadSources значение true или false в зависимости от наличия пути к классу и ввел бы единственное определение плагина в разделе обычной сборки.

Есть какой-нибудь совет?Это странная проблема.

Спасибо, ЛЕС

Это было полезно?

Решение

Я подозреваю, что плагин Maven Eclipse предназначен для беспорядок выполните какое-нибудь изменение пути к классу, которое позже повлияет на плагин jetty.

Но, честно говоря, это не очень распространенный способ использования плагина Eclipse, по крайней мере, насколько мне известно.Большинство людей не включают его в свою сборку, они просто запускают его, когда POM изменился, и это обычно происходит не при каждой сборке.Более того, прикасаясь к .classpath сбивает с толку Eclipse, если я хорошо помню, и заставляет полностью перестроить проект, что довольно раздражает.

Итак, в конце концов, и я сожалею об этом, но, похоже, это приносит больше неприятностей, чем пользы.Вы можете попробовать открыть Проблема с Jira хотя.

Другие советы

Вы действительно не хотите запускать maven-eclipse-plugin при каждой сборке, когда присутствует .classpath .Я не могу точно сказать вам, что это делает с путями к классам, но это не то, как это предназначено для использования.Предполагается, что когда вы запускаете его, вы запускаете только eclipse: eclipse (или какую-то другую цель).

Почему вы хотите продолжать перезапускать его?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top