Làm cách nào để đặt tên / nhóm / phiên bản dự án, cộng với khả năng tương thích với {source, target} trong cùng một tệp?


82

Tôi dự định tổng quát hóa việc sử dụng gradle cho các dự án của mình và muốn sử dụng lại cùng một tệp xây dựng ở mọi nơi. Rất tiếc, tôi gặp khó khăn khi cố gắng xác định các thuộc tính được đề cập trong $ subject trong một tệp duy nhất, để dễ dàng di chuyển.

Đây là gradle 1.6.

Những gì tôi đã cố gắng, thất bại trong mọi nỗ lực:

  • gradle.properties: không thể sửa đổi tên (chỉ đọc, phải sử dụng a settings.gradlevà ghi đè tên dự án gốc !); {source,target}CompatibilityKhông tính;
  • settings.gradle: cũng {source,target}Compatibilitykhông được tính đến!

Vì vậy, phương pháp chính xác để đạt được điều này là gì? Những gì tôi đã cố gắng cho đến nay trong gradle.properties:

group = something
name = whatever  # cannot do!
version = whatever
sourceCompatibility = whatever # not taken into account!

Và trong settings.gradle:

sourceCompatibility = "whatever";  # not taken into account!

CHỈNH SỬA Vâng, vấn đề "tên" không thể được giải quyết; phần còn lại, tôi đã sử dụng một tệp khác mà tôi áp dụng trong tệp xây dựng. Việc xử lý "tên" thực sự không đúng: /

EDIT 2 Đây là năm 2014 và lớp 1.12, và vấn đề vẫn chưa được giải quyết ...


1
FYI, việc không thể tùy chỉnh tên dự án trong tệp build.gradle hiện là một yêu cầu cải tiến: issue.gradle.org//browse/GRADLE-2412 .
Ryan Nelson

Câu trả lời:


125

gradle.properties:

theGroup=some.group
theName=someName
theVersion=1.0
theSourceCompatibility=1.6

settings.gradle:

rootProject.name = theName

build.gradle:

apply plugin: "java"

group = theGroup
version = theVersion
sourceCompatibility = theSourceCompatibility

Vì vậy, bạn muốn sử dụng lại trên các bản dựng? Bạn có thể làm apply from: "other.gradle"hoặc apply from: "http://my.server.com/other.gradle". Lưu ý rằng cái sau hiện không được lưu trong bộ nhớ cache. Để có được bộ nhớ đệm, bạn phải viết một plugin nhị phân .
Peter Niederwieser

Có, tôi sử dụng apply from:giải pháp; tuy nhiên điều này không giải quyết được vấn đề tên :(
FGE

1
Tôi nghĩ rằng trong Gradle mới nhất, bạn cũng có thể áp dụng một plugin settings.gradle. Tuy nhiên, có vẻ hơi kỳ lạ khi sử dụng một plugin để đặt cùng một tên dự án trên các bản dựng.
Peter Niederwieser

Lưu ý rằng bạn cũng có thể đặt tất cả các thuộc tính này từ init.gradletrang chủ người dùng của mình (xem hướng dẫn sử dụng).
Peter Niederwieser

1
Bạn không phải xác định các biến trong gradle.properties và sử dụng trong settings.gradle. Bạn chỉ có thể đề cập trong settings.gradle rootProject.name = "someName". Đảm bảo chỉ định nó trong dấu ngoặc kép trong settings.gradle.
Gopinath MR

22

Tôi đã tìm thấy giải pháp cho một vấn đề tương tự. Tôi đang sử dụng Gradle 1.11 (vào tháng 4 năm 2014). Tên dự án có thể được thay đổi trực tiếp trong settings.gradletệp như sau:

  rootProject.name='YourNewName'

Điều này sẽ xử lý việc tải lên kho lưu trữ (Artifactory w / plugin của nó dành cho tôi) với đúng tạo tác.


2
Giải pháp này không lý tưởng cho các bản dựng nhiều dự án.
asandroq

@asandroq, vì bạn chỉ có thể có một tệp cài đặt duy nhất, bạn sẽ phải đổi tên mô-đun phụ từ đó. Nó là trung tâm, nhưng nó hoạt động.
Snicolas

19

Tôi đặt baseName tạo tác để nó độc lập với tên dự án xây dựng, cho phép tôi đạt được những gì bạn muốn:

jar {
    baseName "core"
}

Với bộ thuộc tính này, ngay cả khi tên dự án của tôi là "foo", khi tôi chạy gradle install, tạo tác được xuất bản với tên corethay vì foo.


1
Không giúp ích cho tất cả các nhiệm vụ khác sẽ sử dụng tên dự án và có thể tạo ra sự nhầm lẫn bổ sung đối với các tên xung đột ...
Quartz

4

Rõ ràng điều này có thể xảy ra settings.gradlevới một cái gì đó như thế này.

rootProject.name = 'someName'
gradle.rootProject {
    it.sourceCompatibility = '1.7'
}

Gần đây tôi đã nhận được lời khuyên rằng một thuộc tính dự án có thể được thiết lập bằng cách sử dụng một lệnh đóng sẽ được gọi sau khi Dự án khả dụng.


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.