Maven Eclipse 플러그인이 Maven Jetty 플러그인을 깨는 이유는 무엇입니까?
-
20-09-2019 - |
문제
빌드가 실행될 때마다 Maven Eclipse 플러그인이 .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 오류로 실패하게됩니다 (모든 종류의 스프링 클래스가없는 것에 대해 불평합니다). 물론 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)
물론 이클립스 플러그인 섹션을 삭제하면 예상대로 부두를 실행할 수 있습니다.
$ 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가있는 경우에만이 프로파일 만 활성화합니다. 이것은 반 직관적 인 것처럼 보이지만 이유가 있습니다.. ClassPath가 없을 때 활성화되는 다른 프로파일이 있습니다. 나는 이것이 각 빌드가 발생하기를 원하지 않으므로 클래스 경로가 이미있을 때 별도의 플러그인 구성을 만들었습니다.
- 예, 전체 플러그인 구성을 다시 지정하는 대신 변경하고자하는 옵션의 값을 보유한 속성을 만들 수 있습니다. 이 경우 Eclipse.DownloadSources 속성을 클래스 경로의 존재에 따라 True 또는 False로 설정하고 일반 빌드 섹션에 단일 플러그인 정의가 있습니다.
어떤 충고? 이것은 이상한 문제입니다.
고마워요, 레
해결책
Maven Eclipse 플러그인을 생각합니다 엉망 나중에 Jetty Plugin에 영향을 미치는 ClassPath Woodo를 수행하십시오.
그러나 솔직히 말해서, 이것은 적어도 내 지식이 아닌 Eclipse 플러그인을 사용하는 매우 일반적인 방법이 아닙니다. 대부분의 사람들은 빌드에 포함시키지 않으며 POM이 변경되었을 때 실행하며 일반적으로 모든 빌드가 발생하지는 않습니다. 또한, 만지고 있습니다 .classpath
내가 잘 기억하고 꽤 성가신 프로젝트의 깨끗한 재건을 강요한다면 일식을 혼란스럽게합니다.
결국, 죄송합니다. 이것은 혜택보다 더 성가심을 불러 일으키는 것 같습니다. 당신은 a를 열 수 있습니다 지라 문제 그렇지만.
다른 팁
.classpath가있을 때 모든 빌드에서 Maven-Eclipse-Plugin을 실행하고 싶지 않습니다. 나는 그것이 클래스 경로에 무엇을하는지 정확히 말할 수 없지만 이것이 사용되는 방식이 아닙니다. 당신이 그것을 실행할 때 당신은 Eclipse : Eclipse (또는 다른 목표) 만 실행한다고 가정합니다.
왜 다시 실행하고 싶습니까?