2013-08-12 36 views
6

Tôi có cấu hình đa chiếu với 3 dự án khác nhau.Soạn thảo một dự án với khả năng tương thích nguồn java khác nhau

2 dự án phụ thuộc vào dự án thứ 3, mà tôi đặt tên là 'cốt lõi'. Tùy thuộc vào dự án, 'lõi' phải biên dịch thành một cái bình, với khả năng tương thích nguồn tương ứng là 1,4 và 1,6, thành các đầu ra core-1.4.jar và core-1.6.jar.

Có thể thực hiện điều này với một build.gradle đơn hay không, hoặc cách nào là cách tốt nhất để thực hiện việc này? Làm cách nào tôi có thể chỉ định cái bình nào đặc biệt trong các phụ thuộc của tôi cho từng dự án trong số 2 dự án này?

+0

Có, cũng tương thích với mục tiêu. Tôi đã thử: sourceCompatibility = 1.4 targetCompatibility = 1.4 trong tác vụ, nhưng điều này không hoạt động. Một trong những mục tiêu là Java ME, cái còn lại là Android. –

+0

Chính xác thì không hoạt động? –

Trả lời

12

Câu hỏi về cơ bản là cách sản xuất và tiêu thụ hai biến thể của một tạo tác dựa trên cùng một mã Java. Với điều kiện bạn thực sự cần phải tạo ra hai Chum chỉ khác nhau về khả năng tương thích mục tiêu của chúng (mà trước tiên tôi sẽ hỏi), một cách để đạt được điều này là sử dụng bộ nguồn của main của plugin Java (và các tác vụ đi kèm với nó) để tạo ra biến thể đầu tiên và một nguồn mới được đặt để tạo ra biến thể thứ hai. Ngoài ra, biến thể thứ hai cần phải được xuất bản thông qua cấu hình riêng của nó để các dự án phụ thuộc có thể tham chiếu nó. Điều này có thể xem xét như sau:

lõi/build.gradle:

apply plugin: "java" 

sourceCompatibility = 1.4 

sourceSets { 
    main1_4 { 
     def main = sourceSets.main 
     java.srcDirs = main.java.srcDirs 
     resources.srcDirs = main.resources.srcDirs 
     compileClasspath = main.compileClasspath 
     runtimeClasspath = main.runtimeClasspath 
    } 
} 

compileJava { 
    targetCompatibility = 1.6 
} 

compileMain1_4Java { 
    targetCompatibility = 1.4  
} 

jar { 
    archiveName = "core-1.6.jar" 
} 

main1_4Jar { 
    archiveName = "core-1.4.jar" 
} 

configurations { 
    archives1_4 
} 

artifacts { 
    archives1_4 main1_4Jar 
} 

Trong các dự án phụ thuộc:

dependencies { 
    compile project(":core") // depend on 1.6 version 
    compile project(path: ":core", configuration: "archives1_4") // depend on 1.4 version 
} 

Tất cả điều này có thể (nhưng không phải) được thực hiện trong cùng một kịch bản xây dựng. Xem chương "xây dựng nhiều dự án" trong Gradle User Guide để biết chi tiết.

+0

Cảm ơn bạn. Vấn đề của tôi trước đây là tôi đã thiết lập compileClasspath = , loại bỏ jar của dự án cốt lõi khỏi đường dẫn. Thay đổi thành nó + = đã khắc phục sự cố. –

+0

Chỉ nhận ra rằng tôi cần hoàn toàn đại tu câu trả lời của mình. Bây giờ nên gần gũi hơn với sự thật. –

Các vấn đề liên quan