代码之家  ›  专栏  ›  技术社区  ›  nsayer

强制执行Maven插件的生命周期先决条件?

  •  3
  • nsayer  · 技术社区  · 14 年前

    在初始化阶段,我使用maven属性插件从属性文件中读取一组属性。

    我还将jetty插件配置为将两个项目属性(包括上面读取的属性)设置为jetty的系统属性。

    如果我把结果作为

    mvn initialize jetty:run-war
    

    它起作用了。

    如果我说

    mvn jetty:run-war
    

    它失败了。如何强制命令行中指定的目标在包含初始化阶段的生命周期中运行?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Pascal Thivent    14 年前

    如果我说 mvn jetty:run-war 它失败了。

    这不是我所经历的。如果您查看 jetty:run-war 目标,你会看到它:

    调用生命周期阶段的执行 package 在执行之前。

    所以之前的所有阶段 包裹 加上 包裹 本身是运行的,因此,插件绑定到它们。事实上,使用以下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>
    

    运行 MVN码头:开战 产生以下输出:

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

    我们可以看到, properties:read-project-properties initialize 阶段(之前 process-resources 向哪个 resources:resources 如预期。

    换句话说,我无法再现你的问题(或者你应该更具体些)。

        2
  •  1
  •   Ramesh    14 年前

    以下对我有用。希望这有帮助。 文件: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>