【问题标题】:how can I make a jar through gradle including dependency如何通过包含依赖项的 gradle 制作 jar
【发布时间】:2019-10-09 15:55:29
【问题描述】:

我有一个用 kotlin 编写的模块,现在我必须把这个模块变成一个 jar。我必须将 kotlin-stlib-1.3.50.jar 包含到我的 jar 中,以便它可以在 android 中成功运行。但有一个问题是调用我的jar的应用程序也是用kotlin编写的,并且它具有不同版本的kotlin-stdlib。那我该如何解决呢?

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
plugins {
id('com.android.library')
id('kotlin-android')
id('kotlin-android-extensions')
}


android {
compileSdkVersion 28
defaultConfig {
    minSdkVersion 27
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

sourceSets {
    main {
        aidl.srcDirs = ['src/main/aidl']
    }
}

configurations.all {
    resolutionStrategy.force 'com.android.support:support-annotations:26.1.0'
}

}

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
//    implementation 'com.android.support:appcompat-v7:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.41'
implementation 'com.squareup.okio:okio:2.2.2'
implementation 'androidx.fragment:fragment:1.0.0'
implementation 'com.nex3z:notification-badge:1.0.2'
implementation files('libs/framework.jar')
implementation 'com.nex3z:notification-badge:1.0.2'
implementation 'com.android.support:support-annotations:28.0.0'
}
repositories {
mavenCentral()
}



task createJar(type: Jar){
println(configurations.compile.asPath)
archiveName 'wifisdkn_7_4_2.jar'
from('build/intermediates/javac/release/compileReleaseJavaWithJavac/classes')
from('build/tmp/kotlin-classes/release')

from {
    (zipTree('/home/mi/.gradle/caches/transforms-2/files-2.1/d6bc0306f3ac2741d6328b688ed7b145/jars/classes.jar'))
}

from {
    (zipTree('/home/mi/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio/2.2.2/36f483536153f15339a8b48d508e22be7c9c531a/okio-2.2.2.jar'))
}


from{
    (zipTree('/home/mi/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.41/e24bd38de28a326cce8b1f0d61e809e9a92dad6a/kotlin-stdlib-1.3.41.jar'))
}

destinationDir = file('build/libs')
}

createJar.dependsOn(build)

【问题讨论】:

  • 您好,欢迎来到 StackOverflow。您是否需要将依赖项添加到 jar 文件中以便自动解析它们?你熟悉 POM 文件吗?

标签: android gradle kotlin


【解决方案1】:

您不必为此编写任何代码。只需按照以下步骤操作:

  1. 打开右侧的Gradle 项目窗格

  2. 转到您要为其构建 jar 的模块。展开任务节点

  3. 展开 Build 文件夹并双击 Build 操作。

  4. 将开始构建过程。该过程完成后,将生成 JAR/AAr。

  5. 转到模块目录,然后按照路径build -> libs -> .jar

【讨论】:

  • 你好 Jaymin 谢谢你的回答,我照你说的做了。但它不起作用,模块目录中没有这样的路径 build -> libs -> .jar 。而且我也想知道这种方式和build in gradle task有什么区别吗?
  • 没有区别。如果你接近我的方式,你不必编码。您要构建 JAR 什么样的模块?它应该是 Java 库。您也可以使用 .aar 文件。同样的过程也会生成 .aar 文件。
  • 我的模块是 android 库,它不会生成 .jar 或 .aar。构建目录不包含 lib 目录。
  • 它应该可以工作。同样的事情对我有用。我已经多次执行此操作以使用相同的步骤生成 jar/aar。
  • 好的,谢谢,我会再试一次,但我认为它不能解决我的问题。也许你知道如何解决它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 2015-08-27
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 2015-11-15
相关资源
最近更新 更多