views:

265

answers:

2

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 includes the initialization phase?

A: 

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

Pascal Thivent
Your example is almost exactly what I was trying to do, and it wasn't working. I am at a loss.I wound up mooting the problem by making changes to the application context so that it didn't have to be a system property anymore and ripped it all out.
nsayer
A: 

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