Maven: POM mẹ không thể phân giải


101

Tôi đã thiết lập dự án maven của mình dưới dạng 1 dự án shell và 4 mô-đun con. Khi tôi cố gắng xây dựng vỏ. Tôi có:

[INFO] Scanning for projects...
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR] The project module1:1.0_A0 (C:\module1\pom.xml) has 1 error
[ERROR] Non-resolvable parent POM: Failure to find shell:pom:1.0_A0 in http://nyhub1.ny.ssmb.com:8081/nexus/content/repositories/JBoss/ was cached in the local repository, resolution will not be reattempted until the update interval of jboss has elapsed or updates are forced and 'parent.relativePath' points at wrong local POM @ line 5, column 11 -> [Help 2]

Nếu tôi cố gắng xây dựng một mô-đun duy nhất, tôi gặp lỗi tương tự, chỉ thay thế mô-đun1, bằng bất kỳ mô-đun nào.

Yêu cầu tất cả họ tham chiếu đến phụ huynh trong poms của họ.

<parent>
    <artifactId>shell</artifactId>
    <groupId>converter</groupId>
    <version>1.0_A0</version>
</parent>

Đây là các phần liên quan của shell pom:

<groupId>converter</groupId>
<artifactId>shell</artifactId>
<version>1.0_A0</version>
<packaging>pom</packaging>
<name>shell</name>


<modules>
    <module>module1</module>
    <module>module2</module>
    <module>module3</module>
    <module>module4</module>
</modules>

1
nếu có ai quan tâm, thêm <relativePath>..</relativePath>dưới <parent></parent>làm việc cho tôi.
kaptan

2
chạy cái nàymvn install -N & mvn install
Se Song

Đường dẫn tương đối dành cho các dự án không phù hợp không phải là "giải pháp" khi kỳ vọng là một pom trong thư mục mẹ của mô-đun nên có thể truy cập được.
Rick O'Shea

Trong trường hợp của tôi, đó là do nhập nhầm tệp pom.xml.
Oleksii Kyslytsyn

Tóm tắt tất cả các vấn đề có thể xảy ra: stackoverflow.com/a/62704660/6172857
Sumit Badsara

Câu trả lời:


94

Chỉ để tham khảo.

Những niềm vui của Maven.

Đặt đường dẫn tương đối của các mô-đun đến ../pom.xml đã giải quyết được nó.

Phần parenttử có một relativePathphần tử mà bạn cần trỏ đến thư mục của cha. Nó mặc định là..


17
Đúng. Sử dụng Maven yêu cầu bạn phải biết mình làm gì, thử và sai sẽ không giúp bạn đi xa. Mặt khác, có một số tài liệu tham khảo tốt có sẵn. Đây là một .
Nicola Musatti,

6
Vì vậy, bạn đã thêm điều này <relativePath>..</relativePath>dưới <parent></parent>?
octavian

Cảm ơn tôi đã thử nó trong một thời gian để giải quyết vấn đề. Tôi đã đi theo con đường tương đối từ ../pom.xmlđến ../<parent folder>/pom.xml.
Mario Kurzweil

Việc đặt <relativePath> sẽ không cần thiết để giải quyết vấn đề nếu bạn đang trỏ đến một kho lưu trữ riêng tư. Nhìn xuống phản hồi của Tomáš Záluský để được giải thích chi tiết.
Gi1ber7

Tôi đang cố gắng mở rộng tệp pom chính của mình sang một tệp khác (để thử nghiệm) trong cùng một thư mục (cùng một dự án). Nhưng điều này không giải quyết được lỗi này. Bất kỳ ý tưởng làm thế nào để sửa chữa nó?
Praneeth Peiris

38

Nó cũng có thể được sửa bằng cách đưa đúng settings.xmltệp vào ~/.m2/thư mục.


3
Chính xác là đã giải quyết được vấn đề của tôi, cảm ơn !!! Nhưng không phải bằng cách đặt nó vào một thư mục nào đó, mà là trỏ Eclipse đến nó trong Preferences - Maven - User Settings.
Brain

Đã giải quyết vấn đề của tôi quá. Chỉ cần phải đảm bảo các cài đặt cũng được định cấu hình đúng maven.repo..
Saran

21

Lý do thay thế cũng có thể là tạo tác gốc đến từ kho lưu trữ không thể truy cập từ đó pom.xml, thường là kho lưu trữ riêng tư. Giải pháp là cung cấp kho lưu trữ đó trong pom.xml:

<repositories>
    <repository>
        <id>internal-repo</id>
        <name>internal repository</name>
        <url>https://my/private/repo</url>
        <layout>default</layout>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

Trong trường hợp của tôi, vấn đề thậm chí còn phức tạp hơn do Eclipse: kho lưu trữ chỉ hoạt động trong cấu hình đặc biệt ( <profiles><profile><id>activate-private-repo</id><repositories>...) và Maven GUI trong Eclipse không cho phép thiết lập cấu hình này thông quaCtrl+Alt+P phím tắt.

Giải pháp là tạm thời khai báo kho lưu trữ bên ngoài hồ sơ (vô điều kiện), khởi chạy Alt+F5Dự án cập nhật Maven, kích hoạt hồ sơ và đưa khai báo kho lưu trữ trở lại hồ sơ. Đây là lỗi Eclipse chứ không phải lỗi Maven.


Tình hình tương tự! Repo riêng tư không được thêm vào pom.
LoranceChen

4

POM gốc không thể giải quyết: Điều này có nghĩa là bạn không thể giải quyết repo chính.

Trun trên chế độ gỡ lỗi:

[DEBUG] Reading global settings from **/usr/local/Cellar/maven/3.5.4/libexec/conf/settings.xml**
[DEBUG] **Reading user settings from /Users/username/.m2/settings.xml**
[DEBUG] Reading global toolchains from /usr/local/Cellar/maven/3.5.4/libexec/conf/toolchains.xml
[DEBUG] Reading user toolchains from /Users/username/.m2/toolchains.xml
[DEBUG] Using local repository at /Users/username/.m2/repository
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/username/.m2/repository
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:

Bởi vì repo mẹ không phải là một phần của trung tâm maven. Giải pháp là chỉ định một setting.xml trong ~ m2 / để giúp tạo ra POM gốc. /Users/username/.m2/settings.xml

Trong XML đó, bạn có thể cần chỉ định thông tin kho lưu trữ.


Tuyệt vời ! Thêm chi tiết repo của tôi trong cài đặt xml đã hoạt động. Nhưng tại sao nó không lấy từ xml pom (có cùng repo được thêm vào)?
smilyface

3

Chỉ cần thêm <relativePath />để cha mẹ trong pom sẽ trông giống như:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath />
    </parent>

2
Điều này chỉ áp dụng khi cha mẹ không ở trong cùng một cấu trúc dir, tức là trong một kho lưu trữ từ xa.
Ondra Žižka

2

xác minh xem Bạn có các giá trị chính xác trong POM con không

GroupId
ArtefactId
Version

Trong Eclipse, chẳng hạn, Bạn có thể tìm kiếm nó: Eclipse: tìm kiếm pom mẹ


2

<relativePath>

Nếu bạn xây dựng theo một dự án con, thì <relativePath>có thể giúp bạn giải quyết pom gốc.

cài đặt pom mẹ

Nhưng nếu bạn xây dựng dự án con ra khỏi thư mục của nó, <relativePath>nó sẽ không hoạt động. Trước tiên, bạn có thể installđưa tệp mẹ vào kho lưu trữ cục bộ của mình, sau đó xây dựng dự án con.


1

Thay thế 1.0_A0 bằng $ {project.version}

Chạy mvn một lần. Thao tác này sẽ tải xuống tất cả các kho lưu trữ được yêu cầu. Bạn có thể chuyển về 1.0_A0 sau bước này.


Điều này chỉ hoạt động nếu POM mẹ được yêu cầu có cùng phiên bản với POM của mô-đun con. Đây không phải là luôn luôn như vậy.
Gerold Broser

0

Tôi đã gặp vấn đề tương tự trong công việc của mình.

Tạo dự án mẹ mà không phụ thuộc đã tạo tệp parent_project.pom trong thư mục .m2.

Sau đó thêm mô-đun con trong POM mẹ và chạy bản dựng Maven.

<modules>
    <module>module1</module>
    <module>module2</module>
    <module>module3</module>
    <module>module4</module>
</modules>

0

Thêm phụ thuộc vào

pom.xml:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.4.3</version>
</dependency>

0

Tôi đã giải quyết được vấn đề đó sau một thời gian dài thử, tôi đã tạo một tệp khác có tên "parent_pom.xml" trong thư mục tệp mô-đun con tại nội dung cục bộ và dán của parent_pom.xml, được đặt ở xa, vào "parent_pom.xml mới được tạo ". Nó hoạt động với tôi và thông báo lỗi đã biến mất.


0

Thẻ đường dẫn tương đối bên trong làm như sau

<relative>{project_name}/pom.xml</relative>

và sau đó RunAs-> Maven build

Nó đã làm việc cho tôi.


-2

Tôi đã gặp sự cố rằng hai tệp pom.xml xây dựng lò phản ứng có cùng một artefactId.


Trong trường hợp của tôi, mô-đun phụ huynh này không phải trong thư mục mẹ, tôi phải thêm vào các module con <relativePath> ../ mẹ-module-dir </ relativePath>
Rolintocour
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.