java - एक जार पुस्तकालय में जार निर्भरता को कैसे शामिल करें
android gradle (2)
सारांश:
मेरे पास एक AAR फ़ाइल है जो JAR फ़ाइल पर निर्भर करती है, जब मैं AAR प्रोजेक्ट बनाता हूं, तो इसमें JAR कोड नहीं होता है।
विवरण:
मेरे पास एक जावा एसडीके पुस्तकालय परियोजना है जिसमें कोड है जो हम जावा वेब परियोजनाओं के लिए उपयोग करते हैं और इस तरह, यह पुस्तकालय
Gradle
का उपयोग करके बनाया गया है और एक आंतरिक नेक्सस सर्वर (एक जार के रूप में) में रहता है।
लक्ष्य एक जार पुस्तकालय के माध्यम से इस JAR लाइब्रेरी का "एंड्रॉइड कॉन्फ़िगर किया गया" संस्करण प्रदान करना है जिसे कई एंड्रॉइड एप्लिकेशन इसे लागू करने के लिए प्रयास (और बॉयलरप्लेट कोड) का उपयोग और कम कर सकते हैं। यह AAR फ़ाइल Android एप्लिकेशन प्रोजेक्ट्स द्वारा उपयोग किए जाने वाले नेक्सस सर्वर पर भी अपलोड की गई है।
मेरी AAR परियोजना में मेरी Java SDK लाइब्रेरी (JAR) के लिए एक निर्भरता शामिल है, लेकिन जब निर्मित होती है, तो AAR इसमें से कोई भी वर्ग शामिल नहीं करता है।
कोड:
यह जावा एसडीके परियोजना की ग्रेडेल फाइल है:
apply plugin: 'java'
//noinspection GroovyUnusedAssignment
sourceCompatibility = 1.7
version = '1.1.1'
repositories {
mavenCentral()
}
jar {
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
testCompile 'org.apache.directory.studio:org.apache.commons.io:2.4'
compile 'org.springframework:spring-web:3.1.1.RELEASE'
compile 'com.google.code.gson:gson:2.3'
}
यह मेरे AAR प्रोजेक्ट के लिए वर्गीकृत फ़ाइल है, ध्यान दें कि मैंने इसके लिए अपने नेक्सस सर्वर में मेवेन रिपॉजिटरी घोषणाओं को हटा दिया था। मुझे लगता है कि इस सवाल के लिए यह बात नहीं होनी चाहिए।
apply plugin: 'com.android.library'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "2.2.2"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.0'
compile ('com.mycompany:javasdk:1.1.1')
}
यह मेरे एंड्रॉइड प्रोजेक्ट के लिए वर्गीकृत फ़ाइल है, फिर से मैंने नेक्सस सर्वर के संदर्भ हटा दिए हैं:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.mycompany.application1"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.0'
compile ('com.mycompany:androidsdk:[email protected]')
}
नोट: मैंने प्रारंभ में AAR प्रोजेक्ट की कार्यशील निर्देशिका में JAR जोड़कर समस्या का हल किया, लेकिन यह अवांछित है। यह एक नेक्सस सर्वर को बेकार बनाता है। यह अच्छा होगा कि हम JAR के वर्जन नंबर को AAR प्रोजेक्ट की ग्रेडल फाइल में टक्कर दे सकते हैं और अपडेट कंपाइल टाइम पर अपने आप हो जाता है।
NOTE2:
मैंने एंड्रॉइड प्रोजेक्ट में अपने AAR निर्भरता के लिए
सकरात्मक
transitive=true
जोड़ने की कोशिश की लेकिन यह कुछ भी हल नहीं हुआ, असली मुद्दा यह है कि जब AAR प्रोजेक्ट का निर्माण होता है, तो JAR प्रोजेक्ट कोड बंडल नहीं होता है।
आप इस कार्य को जोड़ सकते हैं:
task copyLibs(type: Copy) {
from configurations.compile
into 'libs'
}
आपके नेक्सस से निर्भरताएं डाउनलोड की जाएंगी, लेकिन जब आपको लाइब्रेरी की आवश्यकता होगी, तो पहले इस कार्य को अंजाम दें और
jar
फ़ाइलों को कॉपी किया जाएगा और अंतिम
aar
अंदर शामिल किया जाएगा।
ग्रैडल 4.6 के लिए किसी भी सुझाव ने मेरी मदद नहीं की, इसलिए मैंने अपना खुद का आविष्कार करने में पूरा दिन बर्बाद कर दिया।
आखिरकार मैंने एक अच्छा जिस्ट पाया और इसे अपने ग्रेड के संस्करण के लिए संशोधित किया: https://gist.github.com/stepio/824ef073447eb8d8d654f22d73f9f30b