Maven: POM induk yang tidak dapat diselesaikan


103

Saya memiliki pengaturan proyek maven saya sebagai 1 proyek shell dan 4 modul anak. Saat saya mencoba membangun cangkang. Saya mendapat:

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

Jika saya mencoba membangun modul mandiri, saya mendapatkan kesalahan yang sama hanya mengganti modul1, dengan modul apa pun itu.

Mintalah mereka semua mereferensikan orang tua di pom mereka.

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

Berikut adalah bagian-bagian yang relevan dari 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
jika ada yang tertarik, menambahkan di <relativePath>..</relativePath>bawah <parent></parent>bekerja untuk saya.
kaptan

2
jalankan inimvn install -N & mvn install
Se Song

Jalur relatif untuk proyek yang tidak sesuai, bukan "solusi" ketika ekspektasi adalah pom di folder induk modul harus dapat diakses.
Rick O'Shea

Dalam kasus saya itu karena kesalahan ketik dalam file pom.xml.
Oleksii Kyslytsyn

Semua kemungkinan masalah dirangkum: stackoverflow.com/a/62704660/6172857
Sumit Badsara

Jawaban:


95

Hanya untuk referensi.

Kegembiraan Maven.

Menempatkan jalur relatif modul ke ../pom.xml menyelesaikannya.

The parentelemen memiliki relativePathelemen yang Anda butuhkan untuk menunjuk ke direktori induk. Ini defaultnya..


17
Iya. Menggunakan Maven mengharuskan Anda mengetahui apa yang Anda lakukan, trial and error tidak akan membawa Anda terlalu jauh. Di sisi lain, ada beberapa referensi bagus yang tersedia. Ini satu .
Nicola Musatti

6
Jadi Anda menambahkan ini di <relativePath>..</relativePath>bawah <parent></parent>?
Oktavianus

Terima kasih, saya mencobanya sebentar untuk menyelesaikan masalah. Saya mengambil jalur relatif dari ../pom.xmlke ../<parent folder>/pom.xml.
Mario Kurzweil

Menempatkan <relativePath> tidak akan menyelesaikan masalah jika Anda menunjuk ke repositori pribadi. Lihat tanggapan Tomáš Záluský untuk penjelasan detailnya.
Gi1ber7

Saya mencoba untuk memperluas file pom utama saya ke yang lain (untuk tes) di direktori yang sama (proyek yang sama). Tetapi ini tidak menyelesaikan kesalahan ini. Tahu bagaimana cara memperbaikinya?
Praneeth Peiris

39

Ini juga dapat diperbaiki dengan meletakkan settings.xmlfile yang benar ke dalam ~/.m2/direktori.


3
Persis itu menyelesaikan masalah saya, terima kasih !!! Tapi tidak dengan meletakkannya di beberapa direktori, tapi mengarahkan Eclipse ke sana di Preferensi - Maven - Pengaturan Pengguna.
Otak

Memecahkan masalah saya juga. Hanya harus memastikan bahwa pengaturan juga dikonfigurasi dengan benar maven.repo..
Saran

21

Alasan alternatif juga mungkin artefak induk berasal dari repositori yang tidak dapat diakses dari pom.xml, biasanya repositori pribadi. Solusinya adalah menyediakan repositori itu di 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>

Dalam kasus saya, masalahnya bahkan lebih rumit karena Eclipse: repositori hanya aktif di profil khusus ( <profiles><profile><id>activate-private-repo</id><repositories>...) dan GUI Maven di Eclipse tidak mengizinkan untuk menyetel profil ini melalui Ctrl+Alt+Ppintasan.

Solusinya adalah mendeklarasikan repositori sementara di luar profil (tanpa syarat), meluncurkan Alt+F5Maven Update Project, mengaktifkan profil, dan mengembalikan deklarasi repositori ke dalam profil. Ini agak bug Eclipse, bukan bug Maven.


Situasi yang sama! Repo pribadi tidak ditambahkan ke pom.
LoranceChen

4

POM induk yang tidak dapat diselesaikan : Ini berarti Anda tidak dapat menyelesaikan repo induk.

Jalankan mode debug:

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

Karena repo induk bukan bagian dari pusat maven. Solusinya adalah menentukan setting.xml dalam ~ m2 / untuk membantu menghasilkan POM induk. /Users/username/.m2/settings.xml

Dalam XML itu, Anda mungkin perlu menentukan informasi repositori.


Hebat! Menambahkan detail repo saya di pengaturan xml berhasil. Tetapi mengapa tidak mengambil dari pom xml (yang memiliki repo yang sama ditambahkan di dalamnya)?
smilyface

3

Tambahkan saja <relativePath />sehingga induk di pom akan terlihat seperti:

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

2
Ini hanya berlaku jika induk tidak dalam struktur dir yang sama, yaitu dalam repositori jarak jauh.
Ondra Žižka

2

verifikasi apakah Anda memiliki nilai yang benar di POM anak

GroupId
ArtefactId
Version

Di Eclipse, misalnya, Anda dapat mencarinya: Eclipse: cari pom induk


2

<relativePath>

Jika Anda membangun di bawah proyek anak, maka <relativePath>dapat membantu Anda menyelesaikan pom induk.

instal pom orang tua

Tetapi jika Anda membangun proyek anak dari foldernya, <relativePath>tidak akan berhasil. Anda dapat installmemasukkan pom induk ke dalam repositori lokal Anda terlebih dahulu, lalu membangun proyek anak.


1

Ganti 1.0_A0 dengan $ {project.version}

Jalankan mvn sekali. Ini akan mengunduh semua repositori yang diperlukan. Anda dapat beralih kembali ke 1.0_A0 setelah langkah ini.


Ini hanya berfungsi jika POM induk yang diperlukan memiliki versi yang sama dengan POM sub-modul. Ini tidak selalu terjadi.
Gerold Broser

1

Saya memiliki masalah yang sama dalam pekerjaan saya.

Membangun proyek induk tanpa ketergantungan membuat file parent_project.pom di folder .m2.

Kemudian tambahkan modul anak di POM induk dan jalankan build Maven.

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

Jawaban Anda, bersama dengan <relativePath /> telah memecahkan masalah saya. * relativePath saja tidak.
Gyro Gearloose

0

Tambahkan Ketergantungan di

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

Saya memecahkan masalah itu pada saya setelah mencoba yang sangat lama, saya membuat file lain bernama "parent_pom.xml" di direktori file modul anak di konten lokal dan ditempel dari parent_pom.xml, yang terletak di jarak jauh, ke "parent_pom.xml yang baru dibuat ". Ini berhasil untuk saya dan pesan kesalahan telah hilang.


0

Di dalam tag jalur relatif lakukan hal berikut

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

dan kemudian RunAs-> Maven build

Itu berhasil untuk saya.


-2

Saya memiliki masalah bahwa dua file build pom.xml reaktor memiliki artefactId yang sama.


Dalam kasus saya, modul induk ini tidak ada di folder induk, saya harus menambahkan modul anak <relativePath>
../parent-module-dir
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.