2009-09-08 15 views
8

W moim bieżącym projekcie używamy wtyczek wymaganych przez inne parametry wtyczek, takie jak properties-maven-plugin lub buildnumber-plugin.Jak powiązać cel wtyczki z innym celem wtyczki

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

Problemem jest to, że podczas wykonywania bezpośrednio cel wtyczki, cele zbindowanych od fazy zainicjowana (lub potwierdzić) nie są wykonywane. Tak, aby wygenerować schematu szpiega musimy wpisać:

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

Chcemy powiedzieć, że właściwości wtyczki i wtyczki buildNumber muszą być wykonane dla każdego polecenia maven więc możemy wpisać:

$> mvn schemaspy:schemaspy 

Czy istnieje czysty sposób to zrobić (bez skryptów)?

Odpowiedz

6

Najprostszym sposobem byłoby powiązać schemaspy cel do fazy cyklu życia (szczególnie jak zrobiono to fs pozostałych dwóch wtyczek), więc wtedy można po prostu uruchomić coś podobnego pakietu mvn i mieć wszystkie trzy wtyczki wykonywane w odpowiednich fazach.

Jeśli chcesz wtyczki schmespy być wykonywane tylko pod pewnymi warunkami, umieścić go w profilu, a następnie uruchomić pakiet mvn -P schemaspy, aby go uaktywnić. Konfiguracja do osiągnięcia tego wygląda tak:

<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> 
+0

Nigdy o tym nie myślałem. Lubię to. Dzięki. – noirbizarre

+3

Przepraszam, ale to mi nie pomoże. Czy możemy powiązać cel z innym celem? Muszę obliczyć nazwę oddziału za pomocą wtyczki w kontekście rozgałęzienia dla wydania. Byłoby dziwne prosić twórców o włączenie profilu i uruchomienie fazy cyklu życia, aby stworzyć oddział, kiedy normalnie po prostu uruchomiliby "release: branch" ... –