Tôi đang cố gắng xây dựng tệp pom.xml của mình để tôi có thể tự động tạo giản đồ cơ sở dữ liệu khi chạy 'mvn install'. Tôi đang sử dụng "maven-cayenne-plugin" để làm điều này. Đây là plugin đang được gọi (ở giai đoạn thử nghiệm tích hợp), vì tôi có thể thấy đầu ra. Nhưng mojo thất bại với ngoại lệ: (Tôi đã sử dụng cờ -e và -X để xem điều này).Phạm vi phụ thuộc cho trình điều khiển Derby JDBC trong phạm vi tích hợp (cayenne)
java.lang.ClassNotFoundException: org.apache.derby.jdbc.ClientDriver
(Tôi nhận được như vậy nếu tôi thử và sử dụng EmbeddedDriver và có hay không bao gồm 'derbyclient' hoặc đơn giản 'derby' làm phụ thuộc của tôi).
Đây là tệp pom.xml sẽ tái tạo sự cố. Tôi đang sử dụng MVN 3 trên Windows. [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>
này cũng đòi hỏi một cayenne hợp lệ "datamap.map.xml" tập tin (trong src/main/nguồn lực), đây là một trong tôi đã thực hiện trước đó:
<?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>
EDIT:
thêm nhiều thông tin.
derbyclient-10.10.1.1.jar chứa lớp 'org.apache.derby.jdbc.ClientDriver' (chỉ cần mở rộng JAR từ Netbeans).
Lá cờ -X dường như để chứng minh rằng CLASSPATH là tham khảo một cách chính xác 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]
GIẢI PHÁP: làm việc pom.xml (xem câu trả lời và nhận xét của tôi):
<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>
1) Bạn có chắc chắn rằng 'org.apache.derby.jdbc.ClientDriver' thực sự nằm trong phụ thuộc' derbyclient'? 2) Cố gắng chạy với tham số dòng lệnh '-X' và xem nếu classpath khi thực hiện các plugin trong câu hỏi có chứa sự phụ thuộc này. –
Bạn có thể cho biết các công cụ maven có lấy thành công bản sao của derbyclient.jar từ kho lưu trữ maven không? Tôi thường không sử dụng Maven, nhưng tôi nghĩ rằng đôi khi số phiên bản được mã hóa trong tên jar, vì vậy có thể bạn cần tìm nạp một cái gì đó như derbyclient_10_10_1_1.jar? –
Tôi sẽ chỉnh sửa Bài đăng gốc của mình - nhưng câu trả lời nhanh cho 1) và 2) là "có" (nằm trong JAR) và 2) Khá chắc chắn đường dẫn lớp là chính xác (từ đầu ra -X). – monojohnny