Pergunta

Eu gostaria de fazer com que o plug -in do MAVEN ECLIPSE regenere meu .classPath sempre que uma construção é executada, e eu o fiz usando a seguinte configuração:

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

Por alguma razão, isso faz com que o plug -in do Maven Jetty falhe com os erros de classe NOTFoundException (reclama de todos os tipos de classes de primavera que não estão lá). Obviamente, funcionou sem um acerto quando eu não tinha o plug -in do Maven Eclipse instalado. Aqui está um exemplo do que estou falando:

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

Obviamente, se eu excluir a seção de plug -in do Eclipse, posso executar o jetty conforme o esperado:

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

Algumas coisas que eu sei:

  • Sim, eu apenas ativo esse perfil se o .classPath estiver presente. Isso parece contra-intuitivo, mas tenho um motivo: tenho outro perfil que ativa quando o .classPath está ausente, o que executa o plug-in do Eclipse com as opções para baixar o código-fonte e os javadocs definidos como true. Não quero que isso aconteça cada compilação, então criei uma configuração de plug -in separada para quando o caminho de classe já estiver lá.
  • Sim, eu poderia simplesmente criar propriedades que mantinham os valores das opções que desejo alterar em vez de especificar a configuração inteira do plug -in novamente. Nesse caso, eu apenas definiria uma propriedade Eclipse.DownloadSources como verdadeira ou falsa, dependendo da presença do caminho de classe e possuía uma única definição de plug -in na seção de construção regular.

Algum conselho? Este é um problema estranho.

Obrigado, Les

Foi útil?

Solução

Eu suspeito que o plugin do Maven Eclipse para bagunça Faça um pouco de classe de classe que afete o plug -in do jetty posteriormente.

Mas, para ser sincero, essa não é uma maneira muito comum de usar o plug -in do Eclipse, pelo menos não ao meu conhecimento. A maioria das pessoas não o inclui em sua construção, elas simplesmente o executam quando o POM mudou e isso geralmente não acontece a cada compilação. Além disso, tocando o .classpath Confunde o Eclipse, se bem me lembro e força uma reconstrução limpa do projeto, o que é bastante irritante.

Então, no final, e sinto muito por isso, isso parece apresentar mais aborrecimentos do que benefícios. Você pode tentar abrir um Edição jira no entanto.

Outras dicas

Você realmente não quer executar o maven-eclipse-plugin em todas as compilações quando houver um .classpath presente. Não posso dizer exatamente o que faz com os patchs, mas não é assim que se destina a ser usado. A suposição é que, quando você o executa, você só executa o Eclipse: Eclipse (ou algum outro objetivo).

Por que você quer continuar executando-o?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top