force lifecycle prerequisite for maven plugin execution?
I use the maven-properties-plugin during the initialization phase to read in a bunch of properties from a properties file.
I also have the jetty plugin configured to set a couple of the project properties - including those read in above - as system properties to jetty.
If I run the result as
mvn initialize jetty:run-war
it works.
If I just say
mvn jetty:run-war
it fails. How can I force a goal specified on the command line to run in a lifecycle that i开发者_Python百科ncludes the initialization phase?
Following works for me. Hope this helps. file: pom.xml
<profiles>
<profile>
<!-- mvn -Plocal -->
<id>local</id>
<build>
<defaultGoal>package</defaultGoal>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run-war</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
If I just say
mvn jetty:run-war
it fails.
That's not what I'm experiencing. If you look at the documentation of the jetty:run-war
goal, you'll see that it:
Invokes the execution of the lifecycle phase
package
prior to executing itself.
So all the phases preceding package
plus the package
itself are run and, consequently, the plugins bound to them. And indeed, with the following POM:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stackoverflow</groupId>
<artifactId>q2488581</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>q2488581 Maven Webapp</name>
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.10</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>etc/config/dev.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Running mvn jetty:run-war
produces the following output:
$ mvn jetty:run-war [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building q2488581 - Maven Webapp [INFO] task-segment: [jetty:run-war] [INFO] ------------------------------------------------------------------------ [INFO] Preparing jetty:run-war [INFO] [properties:read-project-properties {execution: default}] [INFO] [resources:resources {execution: default-resources}] [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [compiler:compile {execution: default-compile}] [INFO] No sources to compile [INFO] [resources:testResources {execution: default-testResources}] [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /home/pascal/Projects/stackoverflow/q2488581/src/test/resources [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] No sources to compile [INFO] [surefire:test {execution: default-test}] [INFO] No tests to run. [INFO] [war:war {execution: default-war}] [INFO] Packaging webapp [INFO] Assembling webapp[q2488581] in [/home/pascal/Projects/stackoverflow/q2488581/target/q2488581] [INFO] Processing war project [INFO] Copying webapp resources[/home/pascal/Projects/stackoverflow/q2488581/src/main/webapp] [INFO] Webapp assembled in[76 msecs] [INFO] Building war: /home/pascal/Projects/stackoverflow/q2488581/target/q2488581.war [INFO] [jetty:run-war {execution: default-cli}] ...
As we can see, properties:read-project-properties
is invoked during the initialize
phase (before process-resources
to which resources:resources
is bound) as expected.
In other words, I cannot reproduce your problem (or maybe you should be more specific).
精彩评论