2015-10-22 17 views
6

Tôi có một Dự án được gọi là Cha mẹ. Kiểu của nó là POM. Có một thư viện (ojdbc6.jar) mà không có sẵn trong kho lưu trữ công cộng vì vậy tôi đang truy cập nó qua <SystemPath> như bạn có thể nhìn thấy trong dưới pom.xml:Không thể truy cập thư viện dự án mẹ (jar) trong mô-đun con - Maven

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.Parent</groupId> 
    <artifactId>Parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <modules> 
     <module>childModule</module> 
    </modules> 

    <dependencies> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>ojdbc</artifactId> 
      <version>6</version> 
      <scope>system</scope> 
      <systemPath>${basedir}/lib/ojdbc6.jar</systemPath> 
     </dependency> 
    </dependencies> 

    <repositories> 
     <repository> 
      <id>in-project</id> 
      <name>In Project Repo</name> 
      <url>file://${basedir}/lib</url> 
     </repository> 
    </repositories> 

Bây giờ tên dự án con là Child-Module1Child-module2 sử dụng này (ojdbc6.jar) thư viện Đó là POM được đề cập dưới đây:

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>testApp</artifactId> 
    <version>1.14.5.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <name>APP1</name> 
    <description>Application</description> 

    <parent> 
     <groupId>com.Parent</groupId> 
     <artifactId>Parent</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </parent> 
</project> 

Khi tôi xây dựng bằng Maven, nó cho tôi lỗi:

Description Resource Path Location Type 
The container 'Maven Dependencies' references non existing library 
'C:\Users\ABCCOMPUTER_NAME\.m2\repository\com\oracle\ojdbc\6\ojdbc-6.jar' 
testApp Build path Problem. 

Tại sao nó trông trong kho lưu trữ cục bộ? Nó chỉ xảy ra khi dự án mẹ chứa một thư viện (jar) có chứa đường dẫn hệ thống. Nó không xảy ra khi truy cập thư viện đường dẫn hệ thống (jar) trong cùng một dự án, giống như phụ huynh giới thiệu ojdbc6.jar, nó là tốt ở đó.

+0

Bình nằm ở đâu so với trẻ em? Thuộc tính basedir có giá trị khác nhau trong parent và children. –

+0

Jar nằm trong thư mục lib liên quan đến dự án cha mẹ và maven trasfer jars phụ thuộc vào module của nó. Tôi giả định maven chuyển đổi tương đối với đường dẫn tuyệt đối khi nó bao gồm jar phụ thuộc vào module con. –

Trả lời

4

tôi giải quyết vấn đề bằng cách cập nhật systemPath trong pom.xml mẹ như hình dưới đây:

<systemPath>${main.basedir}/lib/ojdbc6.jar</systemPath> 

và sau đó thêm tài sản main.basedir ở cha mẹ pom.xml và kho lưu trữ

<properties> 
     <main.basedir>${project.basedir}</main.basedir> 
    </properties> 
<repositories> 
     <repository> 
      <id>in-project</id> 
      <name>In Project Repo</name> 
      <url>file://${main.basedir}/lib</url> 
     </repository> 
</repositories> 

sau đó thêm các thuộc tính và phần tử kho chứa trong mô-đun con ("/ .." được thêm vào như thư mục con module nằm trong thư mục mẹ để đi lên một thư mục, sau đó đặt đường dẫn tuyệt đối vào thư mục lib gốc sẽ được tạo như mong đợi):

<properties> 
     <main.basedir>${project.basedir}/..</main.basedir> 
    </properties> 
<repositories> 
      <repository> 
       <id>in-project</id> 
       <name>In Project Repo</name> 
       <url>file://${main.basedir}/lib</url> 
      </repository> 
    </repositories> 
+0

[Câu trả lời này] (http://stackoverflow.com/questions/1012402/maven2-property-that-indicates-the -parent-directory) giúp tôi tìm ra vấn đề nhưng câu trả lời của nó không giải quyết được vấn đề của tôi vì vậy tôi đã thực hiện một số R & D và đưa ra giải pháp đã kết hợp ở trên. –

0

Từ: https://stackoverflow.com/a/2230464/1490322

Finally, declare it like any other dependency (but without the system scope):

<dependency> 
    <groupId>your.group.id</groupId> 
    <artifactId>3rdparty</artifactId> 
    <version>X.Y.Z</version> 
</dependency> 
+0

Câu trả lời bạn đã đề cập có một nhược điểm tôi tự hỏi tại sao mọi người đánh giá cao nó. Khi bạn cam kết dự án với bất kỳ kho lưu trữ SVN nào để các nhà phát triển khác có thể truy cập dự án, v.v .. Họ cần chạy lệnh svn install bla bla .. (inorder để cam kết trong đó repo địa phương) và nếu có nhiều không repo jar toàn cầu thì đó là nhiệm vụ tốn thời gian. –

+0

Điều này không hoạt động với các bản dựng nhiều mô-đun và câu hỏi của OP đã ngụ ý một số hiểu biết về chiến lược này –

Các vấn đề liên quan