Làm cách nào để bạn đặt ID tạo tác maven của một dự án gradle?


85

Từ tài liệu của plugin gradle maven- Publishing , rõ ràng là bạn đặt groupIdversioncủa dự án trực tiếp trong build.gradle:

group = 'org.gradle.sample'
version = '1.0'

Tuy nhiên, có artifactIdvẻ như được lấy từ tên của thư mục bạn đang làm việc trong đó. Có cách nào để thiết lập artifactIdrõ ràng không?

Câu trả lời:


85

Từ 36.2.3. Giá trị nhận dạng trong POM được tạo

publishing {
    publications {
        maven(MavenPublication) {
            groupId 'org.gradle.sample'
            artifactId 'project1-sample'
            version '1.1'

            from components.java
        }
    }
}

ID cấu phần phần mềm mặc định cho tên dự án được định cấu hình trong settings.gradleđó, lần lượt mặc định cho tên thư mục dự án.

Bạn sẽ cần plugin thích hợp.

plugins {
    id 'maven-publish'
}

Xin chào Peter, cảm ơn vì đã phản hồi. Nhìn vào tài liệu tôi đã liên kết, cũng là 65.4, chúng tôi rõ ràng có các phiên bản khác nhau của tài liệu.
Armand

Ah, nó ở 65.2.3 của tài liệu 2.0. Kỹ năng hiểu của tôi rõ ràng là kém; Tôi không biết làm thế nào tôi đã bỏ lỡ điều này khi tìm kiếm trang 'hiện vật' - xin lỗi.
Armand

Đó là ví dụ 65.4 trong chương bạn đã liên kết đến.
Peter Niederwieser

13
Nếu bạn muốn thay đổi tên dự án (đây là một câu hỏi riêng), bạn có thể làm như vậy trong settings.gradle(ví dụ rootProject.name = "something").
Peter Niederwieser

2
Quan trọng: Đặt tên dự án trong settings.gradle (ví dụ: rootProject.name = "org.myorg.myproject") là rất quan trọng để khắc phục sự cố trong đó Jenkins build đang tải lên groupId dựa trên mặc định thành tên thư mục không gian làm việc Jenkins.
Farrukh Najmi

16

Liên quan đến settings.gradletệp gốc , bạn có thể thay đổi tên của dự án gốc bằng:

rootProject.name = 'myproject'

Nhưng nếu bạn muốn thay đổi tên của một dự án con (ví dụ: dự án con "ứng dụng" mặc định của một dự án AndroidStudio), bạn có thể làm như sau, vẫn trong settings.gradletệp gốc :

rootProject.children.each {
    it.name = ('app' == it.name ? 'MyAppName' : it.name)
}

Như đã được đề cập bởi @FarrukhNajmi trong một nhận xét, việc thêm rootProject.name trong tệp settings.gradle sẽ dừng tạo tác trở thành tên công việc Jenkins khi xây dựng với Jenkins.
Thức ăn gia súc

8

Đây là câu trả lời chính xác cho plugin maven- Publishing. Đây được coi là sự kế thừa cho plugin maven cũ hơn .

Như tôi, nếu bạn gặp khó khăn với plugin cũ hơn, thì câu trả lời chính xác cho "Làm cách nào để đặt id tạo tác maven cho dự án gradle" là:

uploadArchives {
    repositories {
        mavenDeployer {
            pom.artifactId = 'project-sample'
        }
    }
}

3
Đây là một ý tưởng tồi. Làm điều đó ở đây có nghĩa là bất kỳ phụ thuộc nào mà bạn đã khai báo chống lại dự án tương đối từ nơi khác sẽ không nhận được các tệp tin chính xác khi tạo một pom cho chúng.
kebernet

Tôi không nhớ điều này là đúng (đã 18 tháng kể từ khi tôi xử lý vấn đề này) nhưng nếu vậy câu trả lời chính xác là nâng cấp plugin maven của bạn lên plugin mới với mô hình tốt hơn. Cảm ơn bạn!
Matthew Mark Miller

6

Nếu bạn có một dự án nhiều mô-đun và bạn muốn tên của các tạo tác khác với Thư mục (được đặt trong settings.gradle), thì tôi nghĩ cách tiếp cận tốt hơn là có một khối jar cho mỗi dự án con, và ở đó bạn có thể viết baseName, sẽ là id tạo tác. Sau đó, thay vì viết lại khối xuất bản / ấn phẩm cho mỗi dự án con, bạn chỉ viết nó một lần trong bản dựng chính. Viết theo cách này:

cho mỗi dự án con build.gradle:

jar {
    baseName = 'new-artifact-name-A'  //A beacause you also have B, C modules... 
}

trong bản dựng chính .gradle:

publishing {
    publications {
        mavenJava(MavenPublication) {
           artifactId jar.baseName
           from components.java
        }
    }
}

Không thể tìm thấy phương thức jar () cho các đối số
Winter

2

Để xây dựng android và xuất bản thành công cụ tạo nghệ thuật bằng jenkins, tôi đã định cấu hình cài đặt bên dưới trong build.gradle của mô-đun ứng dụng để định cấu hình id nhóm, id tạo tác và phiên bản.

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    group "com.company.division.productgroup" //add group id
    version "8.8.8" //add version

    defaultConfig {

        minSdkVersion 9
        targetSdkVersion 21
        versionCode 32
        versionName "$version"
        archivesBaseName = "android-appname" //add artifact id

    }

archivesBaseName no effect
act262

Trong các phiên bản gần đây hơn của Gradle / Android, tôi nhận thấy rằng có một phương thức setArchivesBaseName () được cung cấp bởi BasePluginConvention có sẵn thay cho việc chỉ định trực tiếp và nó hoạt động với tôi trên plugin Android Gradle 3.1.4 và Gradle 4.10.2 . docs.gradle.org/current/javadoc/org/gradle/api/plugins/…
John Michelau

2

Tuy nhiên, có vẻ như ArtifactId được lấy từ tên của thư mục bạn đang làm việc bên trong. Có cách nào để thiết lập ArtifactId một cách rõ ràng không?

Một câu trả lời đơn giản cho điều này là đặt tên jar.baseNamesau đó ghi đè tên thư mục.

// changes the name of the jar from the directory name
jar.baseName = 'some_arifact_name';

Điều này dường như làm việc cho tôi.


1

Trong Gradle , bạn có thể đặt jar.archiveNameđể ghi đè việc sử dụng tên của thư mục làm việc ...

group = 'com.example'
version = '0.0.1-SNAPSHOT'
jar.archiveName = "myproject-0.0.1-SNAPSHOT.jar"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.