Saya mencoba menyiapkan proyek Maven multi-modul, dan dependensi antar-modul tampaknya tidak disiapkan dengan benar.
Saya sudah:
<modules>
<module>commons</module>
<module>storage</module>
</modules>
di POM induk (yang memiliki pom tipe pengemasan) dan kemudian subdirektori commons/
dan storage/
yang mendefinisikan pom JAR dengan nama yang sama.
Penyimpanan bergantung pada Commons.
Di direktori utama (master), saya menjalankan mvn dependency:tree
dan melihat:
[INFO] Building system
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] domain:system:pom:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:3.8.1:test
[INFO] ------------------------------------------------------------------------
[INFO] Building commons
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
...correct tree...
[INFO] ------------------------------------------------------------------------
[INFO] Building storage
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
Downloading: http://my.repo/artifactory/repo/domain/commons/1.0-SNAPSHOT/commons-1.0-SNAPSHOT.jar
[INFO] Unable to find resource 'domain:commons:jar:1.0-SNAPSHOT' in repository my.repo (http://my.repo/artifactory/repo)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
----------
1) domain:commons:jar:1.0-SNAPSHOT
Mengapa ketergantungan pada "commons" gagal, meskipun reaktor telah melihatnya dengan jelas karena berhasil memproses pohon ketergantungannya? Seharusnya tidak pergi ke 'net untuk menemukannya karena itu di sana ...
Pom untuk penyimpanan:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<parent>
<artifactId>system</artifactId>
<groupId>domain</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>domain</groupId>
<artifactId>storage</artifactId>
<name>storage</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- module dependencies -->
<dependency>
<groupId>domain</groupId>
<artifactId>commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- other dependencies -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Terima kasih atas sarannya!
(Sunting)
Untuk memperjelas, yang saya cari di sini adalah: Saya tidak ingin menginstal modul X untuk membangun modul Y yang bergantung pada X, mengingat keduanya adalah modul yang direferensikan dari induk POM yang sama. Ini masuk akal bagi saya bahwa jika saya memiliki dua hal di pohon sumber yang sama, saya tidak perlu menginstal produk perantara untuk melanjutkan pembuatan. Semoga pemikiran saya masuk akal di sini ...