Untuk waktu yang lama, saya memiliki Jenkins build yang mengeksekusi Sonar sebagai tindakan pasca-build. Ini telah berjalan dengan baik selama bertahun-tahun, lalu minggu lalu mulai gagal dengan ini:
Downloading: http://myNexusServer/nexus/content/groups/public/org/codehaus/mojo/sonar-maven-plugin/2.2-SNAPSHOT/sonar-maven-plugin-2.2-SNAPSHOT.pom
Downloading: http://myNexusServer/nexus/content/groups/public/org/codehaus/mojo/sonar-maven-plugin/2.2-SNAPSHOT/sonar-maven-plugin-2.2-SNAPSHOT.jar
[INFO] Unable to find resource 'org.codehaus.mojo:sonar-maven-plugin:maven-plugin:2.2-SNAPSHOT' in repository central (http://central)
[INFO] Cannot find mojo descriptor for: 'sonar:sonar' - Treating as non-aggregator.
[INFO] ------------------------------------------------------------------------
[INFO] Building portal
[INFO] task-segment: [sonar:sonar]
[INFO] ------------------------------------------------------------------------
Downloading: http://myNexusServer/nexus/content/groups/public/org/codehaus/mojo/sonar-maven-plugin/2.2-SNAPSHOT/sonar-maven-plugin-2.2-SNAPSHOT.jar
[INFO] Unable to find resource 'org.codehaus.mojo:sonar-maven-plugin:maven-plugin:2.2-SNAPSHOT' in repository central (http://central)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] A required plugin was not found: Plugin could not be found - check that the goal name is correct: Unable to download the artifact from any repository
...
Saya memiliki pengaturan yang menurut saya cukup standar, dengan repo publik di Nexus kami yang membagikan semua konten repo lain di Nexus, seperti repo OOTB Codehaus Snapshots. (Ya, saya telah memeriksa empat kali lipat bahwa repo Codehaus Snapshots ada di Repositori Grup yang Dipesan dari repo publik.)
Saya tidak sepenuhnya memahami cara kerja snapshot, tetapi saya mendapat kesan bahwa file maven-metadata.xml memberi tahu klien versi snapshot mana yang tersedia untuk diunduh.
Jika saya menggunakan browser dan langsung membuka repo codehaus-snapshots, saya mendapatkan maven-metadata.xml dengan info versi:
http://myNexusServer/nexus/service/local/repositories/codehaus-snapshots/content/org/codehaus/mojo/sonar-maven-plugin/2.2-SNAPSHOT/maven-metadata.xml
<metadata modelVersion="1.1.0">
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.2-SNAPSHOT</version>
<versioning>
<snapshot>
<timestamp>20131108.154049</timestamp>
<buildNumber>1</buildNumber>
</snapshot>
<lastUpdated>20131108154049</lastUpdated>
<snapshotVersions>
<snapshotVersion>
<extension>jar</extension>
<value>2.2-20131108.154049-1</value>
<updated>20131108154049</updated>
</snapshotVersion>
<snapshotVersion>
<extension>pom</extension>
<value>2.2-20131108.154049-1</value>
<updated>20131108154049</updated>
</snapshotVersion>
</snapshotVersions>
</versioning>
</metadata>
Jika saya mencoba memuatnya dari repo publik, tidak ditemukan:
http://myNexusServer/nexus/content/groups/public/org/codehaus/mojo/sonar-maven-plugin/2.2-SNAPSHOT/maven-metadata.xml
The server has not found anything matching the request URI
Jika saya menambahkan ?deskripsikan permintaan ke repo publik, saya mendapatkan:
{ "data" : { "processingTimeMillis" : 108,
"request" : { "requestContext" : [ "request.received.timestamp=1384808412437",
"request.address=my.ip.addy",
"request.remoteOnly=false",
"request.url=http://myNexusServer/nexus/content/groups/public/org/codehaus/mojo/sonar-maven-plugin/2.2-SNAPSHOT/maven-metadata.xml?describe",
"request.localOnly=false",
"request.appRootUrl=http://myNexusServer/nexus"
],
"requestPath" : "/org/codehaus/mojo/sonar-maven-plugin/2.2-SNAPSHOT/maven-metadata.xml",
"requestUrl" : "http://myNexusServer/nexus/content/groups/public/org/codehaus/mojo/sonar-maven-plugin/2.2-SNAPSHOT/maven-metadata.xml?describe"
},
"requestUrl" : "http://myNexusServer/nexus/content/groups/public/org/codehaus/mojo/sonar-maven-plugin/2.2-SNAPSHOT/maven-metadata.xml?describe",
"response" : { "appliedMappings" : [ "public repository applied []" ],
"processedRepositoriesList" : [ "public",
"releases",
"snapshots",
"thirdparty",
"central",
"java.net-m2",
"java.net-m1-m2",
"google",
"apache-snapshots",
"codehaus-snapshots",
"sonatype.public",
"com.springsource.repository.bundles.release",
"sonar.repo",
"com.springsource.repository.bundles.external"
],
"responseType" : "NOT_FOUND"
}
}
}
Saat saya mencoba membuat sonar:sonar, saya mendapatkan maven-metadata-central.xml di .m2/repository/org/codehaus/mojo/sonar-maven-plugin/2.2-SNAPSHOT, tetapi info versinya hilang:
<metadata>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.2-SNAPSHOT</version>
</metadata>
Jadi menurut saya masalahnya adalah repo publik tidak memberikan informasi versi maven-metadata.xml kepada klien, sehingga klien mencoba mengunduhnya tanpa informasi versi, dan gagal ketika tidak dapat menemukannya. Apakah saya benar tentang hal itu?
Apa yang perlu saya ubah pada konfigurasi Nexus (atau mungkin Jenkins) saya agar ini berfungsi kembali?