Để tải lên một jar qua gradle bạn phải khai báo jar đó như là một xuất bản tạo tác và thêm nó vào một cấu hình cụ thể bằng cách sử dụng vật đóng cửa:
apply plugin:'maven'
configurations{
allJars
}
artifacts{
allJars file("path/to/jarFile.jar")
}
bây giờ bạn có thể cấu hình các uploadAllJars nhiệm vụ tự động tạo ra:
uploadAllJars {
repositories {
mavenDeployer {
repository(url: 'http://localhost:8081/artifactory/acme') {
authentication(userName: 'admin', password: 'password');
}
}
}
Vấn đề là bạn muốn tải lên nhiều hiện vật. Để đạt được điều đó, bạn cần một số động hơn trong kịch bản xây dựng của bạn. Việc tạo ra các bản phát hành năng động cho tất cả các lọ được phát hiện có thể được bao bọc trong một nhiệm vụ. Trong ví dụ của tôi, nhiệm vụ discoverAllJars chỉ đơn giản là tìm trong một thư mục được chỉ định cho các tệp jar. Ở đây bạn cần phải thực hiện logic của riêng bạn để tra cứu các lọ trong kho lưu trữ tgz của bạn.
group = "org.acme"
version = "1.0-SNAPSHOT"
task discoverAllJars{
ext.discoveredFiles = []
doLast{
file("jars").eachFile{file ->
if(file.name.endsWith("jar")){
println "found file ${file.name}"
discoveredFiles << file
artifacts{
allJars file
}
}
}
}
}
Để có thể tải lên nhiều hiện vật trong tác vụ uploadAllJars, bạn phải sử dụng bộ lọc pom. Để biết chi tiết về bộ lọc pom, hãy xem hướng dẫn sử dụng tốt nhất tại http://www.gradle.org/docs/current/userguide/maven_plugin.html#uploading_to_maven_repositories
Vì chúng tôi đã di chuyển cấu hình của các tạo phẩm đã xuất bản sang giai đoạn thực hiện, chúng tôi cũng phải định cấu hình uploadAllJars trong giai đoạn thực thi. Vì vậy, tôi sẽ tạo một tác vụ configureUploadAllJars. Lưu ý cách chúng tôi tham khảo các tập tin jar phát hiện bằng cách sử dụng 'discoverAllJars.discoveredFiles':
task configureUploadAllJars{
dependsOn discoverAllJars
doLast{
uploadAllJars {
repositories {
mavenDeployer {
repository(url: 'http://yourrepository/') {
authentication(userName: 'admin', password: 'password');
}
discoverAllJars.discoveredFiles.each{discoveredFile ->
def filterName = discoveredFile.name - ".jar"
addFilter(filterName) { artifact, file ->
file.name == discoveredFile.name
}
pom(filterName).artifactId = filterName
}
}
}
}
}
}
Bây giờ bạn chỉ cần thêm một sự phụ thuộc giữa uploadAllJars và configureUploadAllJars:
uploadAllJars.dependsOn configureUploadAllJars
Ví dụ này sử dụng cùng một nhóm và phiên bản cho tất cả các tệp jar được phát hiện và tên jar là artifactId. bạn có thể thay đổi điều này như bạn muốn bằng cách sử dụng cơ chế lọc pom.
hy vọng rằng đã giúp,
cổ vũ, René
Cảm ơn, René! Đó chính xác là những gì tôi cần! Tôi mới vào Gradle và tôi không biết rằng bạn có thể cấu hình các nhiệm vụ trong quá trình thực thi.Tôi đã thử một cái gì đó tương tự với plugin 'maven-publish' mới, nhưng nó không hoạt động vì nó không cho phép thay đổi các ấn phẩm trong quá trình thực hiện. –
Ok, bây giờ tôi đang mắc kẹt với tải lên "nguyên" POMs (không có bất kỳ hiện vật gắn liền với họ). –
tác vụ 'discoveryAllJars' không hoạt động 4 me.it chạy vào lỗi' Không thể tìm thấy các tạo phẩm phương thức() cho đối số ' – Marks