每当运行构建时,我想让 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 错误而失败(它抱怨各种 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 存在时才激活此配置文件。这似乎违反直觉,但我有一个理由:我有另一个配置文件在 .classpath 不存在时激活,它运行 eclipse 插件,下载源代码和 javadocs 的选项设置为 true。我不希望每次构建都发生这种情况,所以我为类路径已经存在时创建了一个单独的插件配置。
- 是的,我可以简单地创建包含我希望更改的选项值的属性,而不是再次指定整个插件配置。在这种情况下,我只需根据类路径的存在将 eclipse.downloadSources 属性设置为 true 或 false ,并在常规构建部分中有一个插件定义。
有什么建议吗?这是一个奇怪的问题。
谢谢, LES