2013-09-01 34 views
32

Tôi muốn cài đặt dự án thư viện android cho kho lưu trữ maven cục bộ. Đây là build.gradle:Nhiệm vụ "cài đặt" Gradle Maven plugin không hoạt động với dự án thư viện Android

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.5.+' 
    } 
} 
apply plugin: 'android-library' 
apply plugin: 'maven' 

version = "1.0.0-SNAPSHOT" 
group = "com.example" 

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 18 
    buildToolsVersion "17.0.0" 

    defaultConfig { 
     minSdkVersion 9 
     targetSdkVersion 18 
    } 
} 

Khi tôi chạy:

gradle install -i 

nó bị mắc kẹt ở đây:

Executing task ':project:installTest' due to: 
    Task has not declared any outputs. 
Starting process 'command 'd:\android-sdk-windows\platform-tools\adb.exe''. Working directory: D:\Projects\java\....... Command: d:\android-sdk-windows\platform-tools\adb.exe install -r D:\Projects\java\.......\build\apk\project.apk 
An attempt to initialize for well behaving parent process finished. 
Successfully started process 'command 'd:\android-sdk-windows\platform-tools\adb.exe'' 
> Building > :project:installTest 

điều Vì vậy, lần đầu tiên tôi nhận thấy là nó đang cố gắng cho một số lý do kỳ lạ để triển khai nó trên thiết bị dưới dạng APK.

Tôi có làm gì sai hoặc chỉ plugin android-library không tương thích với plugin maven?

Trả lời

30

Edit: Vui lòng tham khảo trang github (https://github.com/dcendents/android-maven-gradle-plugin) cho các hướng dẫn mới nhất và tìm đúng phiên bản để sử dụng . Các hướng dẫn ban đầu không còn phù hợp nữa với bản phát hành gradle mới nhất.

Original Post:

Tôi đã sửa đổi các maven cắm để tương thích với các dự án thư viện Android. Xem dự án trên github: https://github.com/dcendents/android-maven-gradle-plugin

Cấu hình dự án thư viện Android của bạn để sử dụng nó:

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'com.github.dcendents:android-maven-plugin:1.0' 
    } 
} 

apply plugin: 'android-library' 
apply plugin: 'android-maven' 

Sau đó, bạn sẽ có thể cài đặt aar vào kho maven địa phương của bạn bằng cách sử dụng cài đặt nhiệm vụ.

Hy vọng điều này sẽ hữu ích, nếu bạn tìm thấy sự cố với plugin, hãy cho tôi biết về github và tôi sẽ khắc phục sự cố.

+2

Làm thế nào để bạn cấu hình groupid, artifactid và phiên bản bằng cách sử dụng plugin này? –

+0

Đó là một giải pháp rất hay. Tôi đang sử dụng nó ngay trong dự án thư viện của mình! Mối quan tâm duy nhất của tôi là, làm thế nào bạn sẽ đối phó với các bản cập nhật mới cho plugin Gradle Maven, bạn sẽ giữ những bản cập nhật này đồng bộ không? –

+0

Vâng tôi không cần phải cho đến nay, nhưng nếu bạn (hoặc người khác) nhận thấy nó phá vỡ khi sử dụng một bản phát hành gradle mới sau đó xin vui lòng mở một vấn đề về dự án github và tôi sẽ phát hành một phiên bản cập nhật. – dcendents

0

Tôi chỉ giải quyết vấn đề này bằng cách định nghĩa một kho lưu trữ upload như đã mô tả ở đây: Gradle documentation 52.6.2. Deploying to a Maven repository

uploadArchives { 
    repositories { 
    mavenDeployer { 
     repository(url: "file://${System.env.HOME}/.m2/repository/") 
    } 
    } 
} 

gọi

gradle uploadArchives 

triển khai artefact đến (trong trường hợp của tôi địa phương) Maven repo. Tôi không tìm thấy cách đơn giản và linh hoạt hơn để chỉ định url của repo cục bộ với ví dụ: mavenLocal() nhưng những điều trên phù hợp với nhu cầu của tôi.

+0

Cảm ơn nhưng tôi đã yêu cầu 'gradle install' không phải' gradle uploadArchives', mà trong trường hợp của tôi được sử dụng để thực sự tải lên tạo phẩm cho Maven Central. Tôi muốn có thể cài đặt trong kho lưu trữ maven cục bộ của tôi trước khi phát hành nó cho Maven Central. –

+0

Đây thực sự không phải là thực hành tốt - vui lòng tham khảo [Câu trả lời của Peter] (http://stackoverflow.com/a/21840160/356895). – JJD

6

CẬP NHẬT 2014-11-26

Câu trả lời dưới đây có ý nghĩa thực hiện tại thời điểm viết bài, khi Android Xây dựng Công cụ đang ở phiên bản 0.5.5. Nó rất có thể đã lỗi thời và có thể không hoạt động nữa.

Cá nhân tôi đã chuyển dự án của mình thành sử dụng android-maven-plugin như được mô tả trong câu trả lời ở trên, plugin cũng hoạt động tốt với các phiên bản Android Build Tools gần đây.

CÂU TRẢ LỜI ORIGINAL TỪ tháng 2 năm 2014

xuất bản như AAR

Nếu bạn không nhớ sử dụng một phiên bản cũ của com.android.tools.build:gradle (tức là 0.5.4), bạn có thể sử dụng phương pháp này được mô tả trong this blogpost. Không phải là theo the discussion in adt-dev mailing-list, điều này không hoạt động trong 0.5.5.

Thêm các dòng sau để build.gradle của bạn:

apply plugin: 'maven-publish' 

// load bundleRelease task 
// this will not load the task in 0.5.5 
android.libraryVariants 

publishing { 
    publications { 
     maven(MavenPublication) { 
      artifact bundleRelease 
     } 
    } 
} 

Để xuất bản vào repo maven địa phương của bạn, hãy gọi lệnh này:

gradle publishToMavenLocal 

xuất bản như JAR

Nếu Android của bạn Thư viện không có tài nguyên tùy chỉnh và có thể được xuất bản dưới dạng JAR, sau đó bạn có thể sử dụngsau đâyhoạt động ngay cả với 0.5.5.

// build JAR file 
task androidReleaseJar(type: Jar, dependsOn: assembleRelease) { 
    from "$buildDir/classes/release/" 
} 

apply plugin: 'maven-publish' 

publishing { 
    publications { 
     maven(MavenPublication) { 
      artifact androidReleaseJar 
     } 
    } 
} 

Để xuất bản vào repo maven địa phương của bạn, hãy gọi lệnh này:

gradle publishToMavenLocal 
+0

Có thể bạn có một anwer trên [cách thay đổi 'artifactId' trong khi sử dụng' maven-publish'] (http://stackoverflow.com/questions/21800033/how-to-overwrite-artifactid-for-android-gradle- thư viện-dự án) ..? – JJD

+0

Vẫn chưa có cách giải quyết nào cho Android 0.5.5 và 'andoroid.libraryVariants'. –

+0

Tôi đã chuyển sang chế độ android-maven-plugin (xem câu trả lời được chấp nhận) và không bao giờ xem lại giải pháp được mô tả trong câu trả lời của tôi. –

11

Có giải pháp dễ dàng hơn nếu bạn không muốn sử dụng plugin tùy chỉnh. Thay vào đó, chỉ cần tạo lại tác vụ cài đặt với một tên khác. Tôi gọi nó là installArchives. Thêm mã sau đây để build.gradle của bạn:

task installArchives(type: Upload) { 
    description "Installs the artifacts to the local Maven repository." 
    repositories.mavenInstaller { 
     configuration = configurations.default 
     pom.groupId = 'my.group' 
     pom.artifactId = 'my-artifact' 
     pom.version = '1.0.0' 
    } 
} 

Bây giờ bạn có thể chạy gradle installArchives để cài đặt aar của bạn tại địa phương.

+0

Bạn có thể sửa đổi nhiệm vụ của mình để tạo ra các lọ cho các nguồn và JavaDoc không? – JJD

+0

@JJD Tác vụ này sẽ chỉ tải lên aar (không có lọ) từ cấu hình mặc định. Tôi không tin rằng plugin Android gradle hỗ trợ tạo ra JavaDocs hoặc nguồn aars ra khỏi hộp. Tìm ra cách để làm điều đó có thể sẽ đảm bảo câu hỏi của riêng mình. – Greg

+3

Trong khi aar được triển khai tới repo maven, pom được tạo ra không chứa các phụ thuộc của dự án thư viện. – Moritz

17

Xây dựng trên xe đạp Câu trả lời của tôi, tôi đề xuất thêm nhiệm vụ "installArchives" riêng biệt. Điều này cũng sẽ chăm sóc việc chọn các tạo phẩm tùy chỉnh của bạn (ví dụ: các nguồn).

apply plugin: 'maven' 

task installArchives(type: Upload) { 
    description "Installs the artifacts to the local Maven repository." 
    configuration = configurations['archives'] 
    repositories { 
    mavenDeployer { 
     repository url: repositories.mavenLocal().url 
    } 
    } 
} 

Lưu ý rằng với plugin Android Gradle v0.5.5, gradle install vẫn cố gắng cài đặt thứ gì đó trên thiết bị.

+0

Không hoạt động cho tôi: ( – Genry

+2

Hoạt động tuyệt vời! Bạn có thể sử dụng 'repositories.mavenLocal(). Url' thay vì mã hóa nó. –

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