私は grails 2.3.4 アプリケーションを開発しており、ビルドのために maven (3.1.1) を追加しようとしています。私のプロジェクトはモジュール化されており(2つのプラグイン、1つのアプリ-今のところ、後でさらに多くのプラグインがあるでしょう)、それをサポートするツールが必要なので(Gradleを使用できませんでしたが、それはまったく別のトピックです)。最近、理解できない問題を見つけて、頭が痛くなりました。それらについて何か助けていただければ幸いです。
私のプロジェクト構造は次のようになります。
my_project/
 my_project-domain/ (plugin)
  pom.xml
 my_project-services/ (plugin)
  pom.xml
 my_project-webap/ (app)
  pom.xml
 pom.xml
私の親 pom.xml:
<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>my.app.group</groupId>
    <artifactId>myArtifactId</artifactId>
    <packaging>pom</packaging>
    <version>0.0.2</version>
    <name>myArtifactId</name>
    <properties>
        <grails.version>2.3.4</grails.version>
        <h2.version>1.3.170</h2.version>
    </properties>
    <repositories>    
        ...
    </repositories>
    <modules>
        <module>my_project-domain</module>
        <module>my_project-services</module>
        <module>my_project-webapp</module>
     </modules>
     <dependencies>
        <!-- MONGODB -->
        <dependency>
            <groupId>org.grails.plugins</groupId>
            <artifactId>mongodb</artifactId>
            <version>1.3.0</version>
            <scope>compile</scope>
            <type>zip</type>
            <exclusions>
                <!-- proper spring-core and spring-beans version included by org.grails:grails-plugin-services -->
                <exclusion>
                    <artifactId>spring-core</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-beans</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- TOMCAT needed during testing -->
        <dependency>
            <groupId>org.grails.plugins</groupId>
            <artifactId>tomcat</artifactId>
            <version>7.0.47</version>
            <scope>provided</scope>
            <type>zip</type>
        </dependency>       
        <!-- without h2 TOMCAT throws DataSource errors -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>${h2.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- GRAILS dependencies-->
        <dependency>
            <groupId>org.grails</groupId>
            <artifactId>grails-plugin-async</artifactId>
            <version>${grails.version}</version>
        </dependency>
        ...
    </dependencies>
    <build>
        <pluginManagement/>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId> 
                <artifactId>maven-compiler-plugin</artifactId>
                ...
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                ...
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                ...
            </plugin>
            <plugin>
                <groupId>org.grails</groupId>
                <artifactId>grails-maven-plugin</artifactId>
                <version>${grails.version}</version>
                <configuration>
                    <fork>true</fork>
                    <!-- for debugging <forkDebug>true</forkDebug> -->
                </configuration>
                <extensions>true</extensions>
                ...
            </plugin>
        </plugins>
    </build>
    <profiles>
        <profile>
        <id>tools</id>
            ...
        </profile>
    </profiles>
</project>
子 pom.xml の例:
<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>my.app.group</groupId>
        <artifactId>myArtifactId</artifactId>
        <version>0.0.2</version>
        <relativePath>..</relativePath>
    </parent>
    <groupId>my.app.group</groupId>
    <artifactId>my_project-services</artifactId>
    <packaging>grails-plugin</packaging>
    <version>0.0.2</version>
    <name>my_project-services</name>
    <description>my_project-services</description>
    <dependencies>
        <dependency>
            <groupId>org.grails.plugins</groupId>
            <artifactId>rest</artifactId>
            <version>0.8</version>
            <scope>runtime</scope>
            <type>zip</type>
        </dependency>
    </dependencies>
</project>
次の方法で統合テストを実行できます。
- mvn test - (親ディレクトリまたは子ディレクトリから) - 単体テストのみを実行します
- grails:test-app - (子ディレクトリから) - 単体テストと統合テストを実行します
- mvn grails:test-app - (子ディレクトリからのみ) 単体テストと統合テストを実行しますが、1 回ではなく 2 回 (u,i ともう一度 u,i) 実行します。
- mvn grails:execute -Dcommand=test-app - (子ディレクトリからのみ) - 単体テストと統合テストを適切な量 (u,i) で実行しますが、統合テスト中にそれらのいくつかが突然失敗します (!!!!)なぜ私の心を吹き飛ばします..
したがって、grails 2.3 をミックスしようとした人がいる場合は、次の情報をお持ちかもしれません。
- このような結果が得られないように、親 pom から mvn grails:test-app を実行できるように Maven を構成するにはどうすればよいですか。 - [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] myArtifactId [INFO] my_project-domain [INFO] my_project-services [INFO] my_project-webapp [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building myArtifactId 0.0.2 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- grails-maven-plugin:2.3.4:test-app (default-cli) @ myArtifactId --- |Loading Grails 2.3.4 |Configuring classpath |Running pre-compiled script . |Environment set to test ....... |Application metadata not found, please run: grails upgrade [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] myArtifactId ..................................... FAILURE [7.116s] [INFO] my_project-domain ................................ SKIPPED [INFO] my_project-services .............................. SKIPPED [INFO] my_project-webapp ................................ SKIPPED [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------
- 統合テストが成功または失敗して実行される理由 - mvn grails:test-appと- mvn grails:exec -Dcommand=tests-appその修正方法 特定の目的のために exec コマンドが必要であり、それに依存できるようにしたいと考えています。それは私の最大の問題です、何が原因なのか全くわかりません
- mvn grails:tests-app二重テストが実行されるのはなぜですか?
- tomcat に h2 依存関係を追加する必要があるのはなぜですか? 私のdataSourcesにはmongodb構成しかありません。統合テストを実行するたびに、mongodb構成のみに固執し、以下のエラーが表示されないようにします。 - |Completed 8 unit tests, 0 failed in 0m 2s ........pool.ConnectionPool Unable to create initial connections of pool. java.sql.SQLException: org.h2.Driver at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:254) at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182) ... Caused by: java.lang.ClassNotFoundException: org.h2.Driver at org.grails.launcher.RootLoader.findClass(RootLoader.java:147) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at org.grails.launcher.RootLoader.loadClass(RootLoader.java:119) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:249) at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246) ... 331 more ........ |Running 4 integration tests...
ここまで読んでくれて、まだ読んでくれているみんなに感謝します。
トム