How to bind a plugin goal to another plugin goal

早过忘川 提交于 2019-12-04 01:00:33

问题


In my current project we use some plugins needed by other plugins parameters like properties-maven-plugin or buildnumber-plugin.

<?xml version="1.0"?>
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>mygroup</groupId>
    <artifactId>myartifact</artifactId>
    <packaging>pom</packaging>
    <version>v0</version>
    <name>myProject</name>

    <properties>
            <env>dev</env>
    </properties>

    <build>
      <plugins>
       <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>properties-maven-plugin</artifactId>
          <version>1.0-alpha-2</version>
          <configuration>
             <files>
                <file>${basedir}/configurations/${env}.properties</file>
             </files>
          </configuration>
          <executions>
              <execution>
                  <phase>initialize</phase>
                  <goals>
                      <goal>read-project-properties</goal>
                  </goals>
              </execution>
          </executions>
      </plugin>

      <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>buildnumber-maven-plugin</artifactId>
          <version>1.0-beta-3</version>
          <executions>
              <execution>
                  <phase>initialize</phase>
                  <goals>
                      <goal>create</goal>
                  </goals>
              </execution>
          </executions>
      </plugin>

      <plugin>
          <groupId>com.wakaleo.schemaspy</groupId>
          <artifactId>maven-schemaspy-plugin</artifactId>
          <version>1.0</version>
          <configuration>
              <databaseType>mysql</databaseType>
              <database>${database.schema}</database>
              <host>${database.host}</host>
              <user>${database.user}</user>
              <password>${database.pwd}</password>
              </configuration>
      </plugin>
    </plugins>
   </build>
</project>

The problem is that when you execute directly a plugin goal, goals binded on the initialize phase (or validate) are not executed. So to generate schema spy we need to type:

$> mvn org.codehaus.mojo:properties-maven-plugin:read-project-properties schemaspy:schemaspy

We want to tell that properties plugin and buildNumber plugin need to be executed for every maven command so we can type:

$> mvn schemaspy:schemaspy

Is there a clean way to do that (without scripting) ?


回答1:


The simplest way would be to bind the schemaspy goal to a lifecycle phase (particularly as you have already done this ffor the other two plugins), so then you can simply run something like mvn package and have all three plugins executed in the appropriate phases.

If you want the schmespy plugin to only be executed under certain circumstances, put it in a profile, then run mvn package -P schemaspy to activate it. The configuration to achieve this looks like this:

<profiles>
  <profile>
    <id>schemaspy</id>
    <plugin>
      <groupId>com.wakaleo.schemaspy</groupId>
      <artifactId>maven-schemaspy-plugin</artifactId>
      <version>1.0</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>schemaspy</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <databaseType>mysql</databaseType>
        <database>${database.schema}</database>
        <host>${database.host}</host>
        <user>${database.user}</user>
        <password>${database.pwd}</password>
      </configuration>
    </plugin>
  </profile>
</profile>


来源:https://stackoverflow.com/questions/1393691/how-to-bind-a-plugin-goal-to-another-plugin-goal

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!