2015-01-21 23 views
11

Trong tất cả các dự án của tôi, tôi sử dụng gradle và xác định như sau:Làm thế nào để thực thi một phiên bản trình biên dịch java với gradle?

sourceCompatibility = "1.7"; // for example 
targetCompatibility = "1.7"; // defaults to sourceCompatibility 

Bây giờ, tôi có ba phiên bản khác nhau của JDK cài đặt, 1,6-1,8. Để chuyển từ phiên bản này sang phiên bản khác, tôi source tệp vỏ để thay đổi PATH, JAVA_HOME và thậm chí JDK_HOME.

Do tai nạn có thể xảy ra khi tôi sử dụng phiên bản JDK sai và tôi không muốn ... Có khả năng kiểm tra phiên bản trình biên dịch có tương đương với targetCompatibility trước khi thử bất kỳ tác vụ biên dịch nào không?

+0

Liệu câu trả lời giúp Bạn: http://stackoverflow.com/questions/18487406/gradle-how-to -tell-gradle-to-use-specific-jdk-phiên bản-cho-xây dựng-một-applica? – Opal

+0

@Opal không, không thực sự; kịch bản của OP khác với kịch bản của tôi. Tôi không sử dụng biến môi trường cụ thể. – fge

+0

ok. Cảm ơn bạn đã làm rõ. – Opal

Trả lời

9

tôi sử dụng như sau:

task checkJavaVersion << { 
    if (!JavaVersion.current().isJava6()) { 
     String message = "ERROR: Java 1.6 required but " + 
          JavaVersion.current() + 
          " found. Change your JAVA_HOME environment variable."; 
     throw new IllegalStateException(message); 
    } 
} 

compileJava.dependsOn checkJavaVersion 
+0

Hmm, thú vị ... Bạn có biết được cơ hội nào không (nếu không tôi sẽ tìm kiếm nó) liệu có thể sử dụng các cá thể JavaVersion làm đối số cho * Khả năng tương thích không? – fge

+0

Không có ý tưởng nào cả. –

+0

Trả lời: IT DOES! Tôi sẽ viết một câu trả lời nhưng chấp nhận của bạn. Cảm ơn! – fge

13

trả lời của bản thân và nhờ @JBNizet cho việc cung cấp các giải pháp ban đầu ...

Các giải pháp thực sự là sử dụng JavaVersion, và nó sẽ xảy ra rằng cả hai sourceCompatibilitytargetCompatibility chấp nhận số JavaVersion làm đối số ...

Do đó, tệp xây dựng đã trở thành:

def javaVersion = JavaVersion.VERSION_1_7; 
sourceCompatibility = javaVersion; 
targetCompatibility = javaVersion; // defaults to sourceCompatibility 

Và sau đó nhiệm vụ:

task enforceVersion << { 
    def foundVersion = JavaVersion.current(); 
    if (foundVersion != javaVersion) 
     throw new IllegalStateException("Wrong Java version; required is " 
      + javaVersion + ", but found " + foundVersion); 
} 

compileJava.dependsOn(enforceVersion); 

Và nó hoạt động:

$ ./gradlew clean compileJava 
:clean UP-TO-DATE 
:enforceVersion FAILED 

FAILURE: Build failed with an exception. 

* Where: 
Build file '/home/fge/src/perso/grappa-tracer-backport/build.gradle' line: 55 

* What went wrong: 
Execution failed for task ':enforceVersion'. 
> Wrong Java version; required is 1.7, but found 1.8 
+0

Cảm ơn bạn đã chia sẻ điều này! Rất hữu ích .. Trong trường hợp của tôi tuy nhiên, tôi thực hiện điều này với một kiểm tra để xem 'if (foundVersion.isJava7Compatible()) {...}'. Chỉ muốn chia sẻ vì tôi nghĩ nó rất tiện lợi. :) – ZaLiTHkA

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