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>
Akan
sumber
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..

Akan
sumber
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.

pengguna1747134
sumber
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.

Tomáš Záluský
sumber
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.

Wu Yongchao
sumber
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>
stakowerflol.dll
sumber
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

tebu
sumber
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.

Elang
sumber
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.

Prasanth Pennepalli
sumber
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>
Prabhu
sumber
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>
Siva
sumber
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.

Ozan Apaydın
sumber
0

Di dalam tag jalur relatif lakukan hal berikut

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

dan kemudian RunAs-> Maven build

Itu berhasil untuk saya.

Sanket Dhumal
sumber
-2

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

benez
sumber
Dalam kasus saya, modul induk ini tidak ada di folder induk, saya harus menambahkan modul anak <relativePath>
../parent-module-dir