5

「mvn install」の実行時にデータベーススキーマを自動的に作成できるように、pom.xml を構築しようとしています。これを行うために「maven-cayenne-plugin」を使用しています。出力を見るとわかるように、これはプラグインが(統合テスト段階で)呼び出されています。しかし、モジョは例外で失敗します: (これを確認するために -e および -X フラグを使用しました)。

java.lang.ClassNotFoundException: org.apache.derby.jdbc.ClientDriver

(EmbeddedDriver を使用しようとすると、依存関係として「derbyclient」または単に「derby」を含めるかどうかに関係なく、同じ結果が得られます)。

問題を再現するはずの pom.xml を次に示します。WindowsでMVN 3を使用しています。[Apache Maven 3.0.4 (r1232337; 2012-01-17 08:44:56+0000)]

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>myproject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.cayenne.plugins</groupId>
                <artifactId>maven-cayenne-modeler-plugin</artifactId>
                <version>3.2M1</version>
            </plugin>
            <plugin>
                <groupId>org.apache.cayenne.plugins</groupId>
                <artifactId>maven-cayenne-plugin</artifactId>
                <version>3.2M1</version>
                <executions>
                    <execution>
                        <id>cgen</id>
                        <configuration>
                            <superPkg>com.mycompany.model.generated</superPkg>
                            <map>${project.build.sourceDirectory}/../resources/datamap.map.xml</map>
                            <destDir>${project.build.sourceDirectory}</destDir>
                        </configuration>
                        <goals>
                            <goal>cgen</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>cdbgen</id>
                        <configuration>
                            <map>${project.build.sourceDirectory}/../resources/datamap.map.xml</map>
                            <driver>org.apache.derby.jdbc.ClientDriver</driver>
                            <url>jdbc:derby:memory:tracedb;create=true</url>
                            <username>test</username>
                        </configuration>
                        <goals>
                            <goal>cdbgen</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
<dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derbyclient</artifactId>
            <version>10.10.1.1</version>
            <scope>compile</scope>
        </dependency>

    </dependencies>
</project>

これには、有効な cayenne の「datamap.map.xml」ファイル (src/main/resources 内) も必要です。以前に作成したものを次に示します。

<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
     project-version="6">
    <db-entity name="TEST">
        <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
    </db-entity>
</data-map>

編集:

さらに情報を追加します。

derbyclient-10.10.1.1.jar にはクラス「org.apache.derby.jdbc.ClientDriver」が含まれています (Netbeans から JAR を展開しただけです)。

-X フラグは、CLASSPATH が JAR を正しく参照していることを示しているようです。

[DEBUG]   (f) classpathElements = [<PROJECT-PATH>\mvn\target\classes, <HOME-DIR>\.m2\repository\org\apache\derby\derbyclient\10.10.1.1\derbyclient-10.10.1.1.jar]

解決策:pom.xmlの作業(回答と私のコメントを参照):

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>myproject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.cayenne.plugins</groupId>
                <artifactId>maven-cayenne-modeler-plugin</artifactId>
                <version>3.2M1</version>
            </plugin>
            <plugin>
                <groupId>org.apache.cayenne.plugins</groupId>
                <artifactId>maven-cayenne-plugin</artifactId>
                <version>3.2M1</version>
<dependencies>
      <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derby</artifactId>
        <version>10.10.1.1</version>
      </dependency>
   </dependencies>
                <executions>
                    <execution>
                        <id>cgen</id>
                        <configuration>
                            <superPkg>com.mycompany.model.generated</superPkg>
                            <map>${project.build.sourceDirectory}/../resources/datamap.map.xml</map>
                            <destDir>${project.build.sourceDirectory}</destDir>
                        </configuration>
                        <goals>
                            <goal>cgen</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>cdbgen</id>
                <configuration>
                            <map>${project.build.sourceDirectory}/../resources/datamap.map.xml</map>
                            <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
                            <url>jdbc:derby:memory:tracedb;create=true</url>
                            <username>test</username>
                        </configuration>
                        <goals>
                            <goal>cdbgen</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
<dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derbyclient</artifactId>
            <version>10.10.1.1</version>
            <scope>compile</scope>
        </dependency>

    </dependencies>
</project>
4

1 に答える 1

6

プラグインの実行中 (コードのコンパイル中と比べて) に Derby ドライバーが確実に使用できるようにするには、プラグイン自体の依存関係として追加する必要があります。

<plugin>
   <groupId>org.apache.cayenne.plugins</groupId>
   <artifactId>maven-cayenne-plugin</artifactId>
   <version>3.2M1</version>
   <dependencies>
      <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derbyclient</artifactId>
        <version>10.10.1.1</version>
      </dependency>
   </dependencies>
   ....
</plugin>
于 2013-08-23T16:53:30.357 に答える