Maven: POM หลักที่ไม่สามารถแก้ไขได้


104

ฉันมีการตั้งค่าโครงการ maven ของฉันเป็น 1 โครงการเชลล์และโมดูลลูก 4 โมดูล เมื่อลองสร้างเปลือก ฉันเข้าใจ:

[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]

หากฉันพยายามสร้างโมดูลเดี่ยวฉันได้รับข้อผิดพลาดเดียวกันแทนที่ module1 ด้วยโมดูลใดก็ตามที่เป็น

ให้พวกเขาทั้งหมดอ้างถึงพ่อแม่ในปอมของพวกเขา

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

นี่คือส่วนที่เกี่ยวข้องของเชลล์ปอม:

<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
หากใครสนใจเพิ่ม<relativePath>..</relativePath>ภายใต้การ<parent></parent>ทำงานสำหรับฉัน
kaptan

2
เรียกใช้mvn install -N & mvn install
Se Song

เส้นทางสัมพัทธ์มีไว้สำหรับโครงการที่ไม่เป็นไปตามข้อกำหนดไม่ใช่ "โซลูชัน" เมื่อสิ่งที่คาดหวังคือ pom ในโฟลเดอร์หลักของโมดูลควรสามารถเข้าถึงได้
Rick O'Shea

ในกรณีของฉันมันเป็นเพราะการพิมพ์ผิดในไฟล์ pom.xml
Oleksii Kyslytsyn

สรุปประเด็นที่เป็นไปได้ทั้งหมด: stackoverflow.com/a/62704660/6172857
Sumit Badsara

คำตอบ:


95

เพียงเพื่อการอ้างอิง

ความสุขของ Maven

การใส่พา ธ สัมพัทธ์ของโมดูลไปที่ ../pom.xml แก้ไขได้

parentองค์ประกอบมีrelativePathองค์ประกอบที่คุณจำเป็นต้องชี้ไปที่ไดเรกทอรีของผู้ปกครอง ค่าเริ่มต้นเป็น..


17
ใช่. การใช้ Maven ต้องการให้คุณรู้ว่าคุณทำอะไรการลองผิดลองถูกจะไม่ทำให้คุณไปไกล ในทางกลับกันมีแหล่งอ้างอิงที่ดีมากมาย นี่คือหนึ่ง
Nicola Musatti

6
คุณเพิ่มสิ่งนี้<relativePath>..</relativePath>ไว้ข้างใต้<parent></parent>?
octavian

ขอบคุณฉันพยายามแก้ปัญหามาระยะหนึ่งแล้ว ผมเอาญาติเส้นทางจากไป../pom.xml ../<parent folder>/pom.xml
Mario Kurzweil

การใส่ <relativePath> ไม่จำเป็นต้องแก้ปัญหาหากคุณกำลังชี้ไปที่ที่เก็บส่วนตัว มองหาคำตอบของTomášZáluskýเพื่อดูคำอธิบายโดยละเอียด
Gi1ber7

ฉันกำลังพยายามขยายไฟล์ pom หลักของฉันไปยังไฟล์อื่น (สำหรับการทดสอบ) ในไดเร็กทอรีเดียวกัน (โปรเจ็กต์เดียวกัน) แต่ไม่สามารถแก้ข้อผิดพลาดนี้ได้ มีความคิดอย่างไรในการแก้ไข
Praneeth Peiris

40

นอกจากนี้ยังสามารถแก้ไขได้โดยใส่settings.xmlไฟล์ที่ถูกต้องลงใน~/.m2/ไดเร็กทอรี


3
ตรงที่แก้ปัญหาของฉันได้ขอบคุณ !!! แต่ไม่ใช่โดยการใส่ลงในไดเร็กทอรี แต่ชี้ Eclipse ไปที่ Preferences - Maven - User Settings
Brain

แก้ไขปัญหาของฉันด้วย แค่ต้องแน่ใจว่าได้กำหนดค่าการตั้งค่าให้เหมาะสมแล้วmaven.repoด้วย ..
ศรัณย์

21

เหตุผลทางเลือกอาจเป็นเพราะอาร์ติแฟกต์พาเรนต์มาจากที่เก็บซึ่งไม่สามารถเข้าถึงได้จากที่pom.xmlเก็บส่วนตัวโดยทั่วไป วิธีแก้ปัญหาคือการจัดเตรียมที่เก็บนั้นใน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>

ในกรณีของฉันปัญหานั้นซับซ้อนยิ่งขึ้นเนื่องจาก Eclipse: ที่เก็บนั้นใช้งานได้เฉพาะในโปรไฟล์พิเศษ ( <profiles><profile><id>activate-private-repo</id><repositories>...) และ Maven GUI ใน Eclipse ไม่อนุญาตให้ตั้งค่าโปรไฟล์นี้ผ่านCtrl+Alt+Pทางลัด

วิธีแก้ปัญหาคือการประกาศที่เก็บภายนอกโปรไฟล์ชั่วคราว (โดยไม่มีเงื่อนไข) เปิดAlt+F5Maven Update Project เปิดใช้งานโปรไฟล์และใส่การประกาศที่เก็บกลับเข้าไปในโปรไฟล์ นี่เป็นบั๊ก Eclipse ไม่ใช่บั๊ก Maven


สถานการณ์เดียวกัน! ไม่ได้เพิ่ม repo ส่วนตัวลงใน pom
LoranceChen

5

เพียงเพิ่ม<relativePath />ดังนั้นผู้ปกครองใน pom ควรมีลักษณะดังนี้:

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

2
ใช้เฉพาะเมื่อพาเรนต์ไม่ได้อยู่ในโครงสร้าง dir เดียวกันเช่นในที่เก็บแบบรีโมต
Ondra Žižka

4

POM หลักที่ไม่สามารถแก้ไขได้: ซึ่งหมายความว่าคุณไม่สามารถแก้ไข repo หลักได้

Trun ในโหมดดีบัก:

[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:

เนื่องจาก repo หลักไม่ได้เป็นส่วนหนึ่งของ maven central วิธีแก้ปัญหาคือระบุ setting.xml ใน ~ m2 / เพื่อช่วยส่งผลให้ POM พาเรนต์ /Users/username/.m2/settings.xml

ใน XML นั้นคุณอาจต้องระบุข้อมูลที่เก็บ


สุดยอด! การเพิ่มรายละเอียด repo ของฉันใน xml การตั้งค่าใช้งานได้ แต่ทำไมมันไม่ใช้จาก pom xml (ซึ่งมี repo เดียวกันที่เพิ่มเข้ามา)?
smilyface

2

ตรวจสอบว่าคุณมีค่าที่ถูกต้องใน POM ลูกหรือไม่

GroupId
ArtefactId
Version

ตัวอย่างเช่นใน Eclipse คุณสามารถค้นหาได้: Eclipse: ค้นหา parent pom


2

<relativePath>

หากคุณสร้างภายใต้โครงการลูกแล้ว <relativePath>คุณสามารถช่วยคุณแก้ไขปอมผู้ปกครองได้

ติดตั้งแม่ปอม

แต่ถ้าคุณสร้างโปรเจ็กต์ลูกจากโฟลเดอร์ <relativePath>จะไม่ทำงาน คุณสามารถinstallนำ pom ไปยังที่เก็บในเครื่องของคุณก่อนจากนั้นจึงสร้างโครงการลูก


1

แทนที่ 1.0_A0 ด้วย $ {project.version}

เรียกใช้ mvn ครั้งเดียว สิ่งนี้จะดาวน์โหลดที่เก็บที่จำเป็นทั้งหมด คุณสามารถเปลี่ยนกลับไปเป็น 1.0_A0 ได้หลังจากขั้นตอนนี้


สิ่งนี้ใช้ได้เฉพาะเมื่อ POM พาเรนต์ที่ต้องการมีเวอร์ชันเดียวกับ POM ของโมดูลย่อย นี่ไม่ใช่กรณีเสมอไป
Gerold Broser

1

ฉันมีปัญหาคล้ายกันในที่ทำงาน

การสร้างโปรเจ็กต์พาเรนต์โดยไม่มีการพึ่งพาสร้างไฟล์ parent_project.pom ในโฟลเดอร์. m2

จากนั้นเพิ่มโมดูลลูกใน POM พาเรนต์และรัน Maven build

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

คำตอบของคุณร่วมกับ<relativePath />ช่วยแก้ปัญหาให้ฉัน * relativePath เพียงอย่างเดียวไม่ได้
Gyro Gearloose

0

เพิ่มการพึ่งพาใน

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

ฉันแก้ไขปัญหานั้นกับฉันหลังจากลองใช้มานานมากฉันได้สร้างไฟล์อื่นชื่อ "parent_pom.xml" ในไดเร็กทอรีไฟล์โมดูลลูกที่เนื้อหาในเครื่องและวางเนื้อหาของ parent_pom.xml ซึ่งอยู่ในระยะไกลไปยัง "parent_pom.xml ที่สร้างขึ้นใหม่ ". มันใช้ได้ผลสำหรับฉันและข้อความแสดงข้อผิดพลาดหายไป




-2

ฉันมีปัญหาว่าไฟล์ pom.xml ของเครื่องปฏิกรณ์สองตัวที่สร้างมี artefactId เหมือนกัน


ในกรณีของฉันโมดูลหลักนี้ไม่ได้อยู่ในโฟลเดอร์หลักฉันต้องเพิ่มในโมดูลลูก <relativePath>
../parent-module-dir
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.