web-dev-qa-db-fra.com

Comment ignorer l'exécution d'un plug-in Maven si "-DskipTests" ou "-Dmaven.test.skip = true" est spécifié?

J'utilise Maven 3.0.3. J'ai ce plugin, que je veux normalement exécuter avant que mes tests JUnit soient exécutés:

    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <test.mysql.db.user>sbjunituser</test.mysql.db.user>
            <test.mysql.db.password></test.mysql.db.password>
            <test.mysql.db.prefix>sbjunit</test.mysql.db.prefix>
            <test.mysql.db.sid>${test.mysql.db.prefix}_${project.artifactId}</test.mysql.db.sid>
            <test.mysql.db.Host>localhost</test.mysql.db.Host>
            <test.mysql.db.port>3306</test.mysql.db.port>
            <test.mysql.dataSource.url>jdbc:mysql://${test.mysql.db.Host}:${test.mysql.db.port}/${test.mysql.db.sid}</test.mysql.dataSource.url>
            <test.mysql.dataSource.driverClassName>com.mysql.jdbc.Driver</test.mysql.dataSource.driverClassName>
        </properties>
        <build>
            <plugins>
        <!--  Run the liquibase scripts -->
        <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>2.0.1</version>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-Java</artifactId>
                    <version>5.1.18</version>
                </dependency>
            </dependencies>
            <executions>
                <execution>
                    <id>build-database</id>
                    <phase>process-test-classes</phase>
                    <configuration>
                        <driver>com.mysql.jdbc.Driver</driver>
                        <url>jdbc:mysql://${test.mysql.db.Host}:${test.mysql.db.port}/${test.mysql.db.sid}</url>
                        <username>${test.mysql.db.user}</username>
                        <password>${test.mysql.db.password}</password>
                        <changeLogFile>${project.build.directory}/db.changelog-master.xml</changeLogFile>
                        <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                    </configuration>
                    <goals>
                        <goal>update</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Cependant, si quelqu'un spécifie -Dmaven.test.skip=true ou -DskipTests, Je voudrais éviter l'exécution de ce plugin. Comment je fais ça? J'ai essayé de changer la phase d'exécution en "test", mais mes tests unitaires s'exécutent avant ce plugin, ce qui n'est pas ce que je veux.

36
Dave

Vous pouvez utiliser des profils qui sont activés lorsque vous utilisez l'une des propriétés de saut de test unitaire pour définir une nouvelle propriété (par exemple skipLiquibaseRun) qui contient l'indicateur si la base de données doit s'exécuter ou non

<profiles>
    <profile>
      <id>default</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <skipLiquibaseRun>false</skipLiquibaseRun>
      </properties>
    </profile>
    <profile>
      <id>skipTestCompileAndRun</id>
      <activation>
        <property>
          <name>maven.test.skip</name>
          <value>true</value>
        </property>
      </activation>
      <properties>
        <skipLiquibaseRun>true</skipLiquibaseRun>
      </properties>
    </profile>
    <profile>
      <id>skipTestRun</id>
      <activation>
        <property>
          <name>skipTests</name>
        </property>
      </activation>
      <properties>
        <skipLiquibaseRun>true</skipLiquibaseRun>
      </properties>
    </profile>
</profiles>

Utilisez la nouvelle propriété dans la section du plugin liquibase pour décider si l'exécution doit être ignoré , comme ceci:

<configuration>
    <skip>${skipLiquibaseRun}</skip>
    <driver>com.mysql.jdbc.Driver</driver>
    <url>jdbc:mysql://${test.mysql.db.Host}:${test.mysql.db.port}/${test.mysql.db.sid}</url>
    <username>${test.mysql.db.user}</username>
    <password>${test.mysql.db.password}</password>
    <changeLogFile>${project.build.directory}/db.changelog-master.xml</changeLogFile>
    <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
</configuration>

Non testé, mais j'espère que cela fonctionne ;-)

21
FrVaBe

Cela a fonctionné pour moi:

<configuration>
   <skip>${skipTests}</skip>
</configuration>

OU

<configuration>
   <skip>${maven.test.skip}</skip>
</configuration>
24
albogdano

Je pense que le moyen le plus simple est de mettre en cascade les propriétés de "saut" dans votre POM:

<properties>
  <maven.test.skip>false</maven.test.skip>
  <skipTests>${maven.test.skip}</skipTests>
  <skipITs>${skipTests}</skipITs>
</properties>

Ensuite, vous pouvez utiliser la dernière propriété "skip" définie ci-dessus dans la configuration de votre plugin:

<configuration>
  <skip>${skipITs}</skip>
</configuration>

Voir Maven Failsafe Plugin: Skipping Tests pour plus de détails sur chacune des différentes propriétés "skip" mentionnées dans cette réponse.

6
mfulton26

Je ne pense pas que cela puisse être fait directement, mais vous pouvez ajouter -Dliquibase.should.run=false pour ignorer complètement la base de données (voir http://www.liquibase.org/manual/maven_update#skip ). Vous pouvez regrouper cette propriété et skipTests dans un profil distinct si vous ne voulez pas taper les deux.

<profiles>
    <profile>
        <id>skipTestAndDb</id>
        <properties>
            <skipTests>true</skipTests>
            <liquibase.should.run>false</liquibase.should.run>
        </properties>
    </profile>
</profiles>

Il vous suffit ensuite de taper mvn install -PskipTestAndDb

1
artbristol

Essayez de l'ajouter à un profil comme dans l'exemple ci-dessous (cependant, cela ne fonctionnera que pour les cas où maven.test.skip n'est pas spécifié:

 <profiles>
    <profile>
        <id>execute-liquibase</id>
        <activation>
            <property>
                <name>!maven.test.skip</name>
            </property>
        </activation>
        <build>
            <plugins>
                <!--  Run the liquibase scripts -->
                <plugin>
                    <groupId>org.liquibase</groupId>
                    <artifactId>liquibase-maven-plugin</artifactId>
                    <version>2.0.1</version>
                    <dependencies>
                       <dependency>
                           <groupId>mysql</groupId>
                           <artifactId>mysql-connector-Java</artifactId>
                           <version>5.1.18</version>
                       </dependency>
                    </dependencies>
                    <executions>
                       <execution>
                           <id>build-database</id>
                           <phase>process-test-classes</phase>
                           <configuration>
                               <driver>com.mysql.jdbc.Driver</driver>
                               <url>jdbc:mysql://${test.mysql.db.Host}:${test.mysql.db.port}/${test.mysql.db.sid}</url>
                               <username>${test.mysql.db.user}</username>
                               <password>${test.mysql.db.password}</password>
                               <changeLogFile>${project.build.directory}/db.changelog-master.xml</changeLogFile>
                               <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                           </configuration>
                           <goals>
                              <goal>update</goal>
                           </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
 <profiles>
1
carlspring