Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Kotlin Gradle API依赖项在使用者中不可用_Java_Kotlin_Gradle_Dependencies_Kotlin Exposed - Fatal编程技术网

Java Kotlin Gradle API依赖项在使用者中不可用

Java Kotlin Gradle API依赖项在使用者中不可用,java,kotlin,gradle,dependencies,kotlin-exposed,Java,Kotlin,Gradle,Dependencies,Kotlin Exposed,我正在建立一个Kotlin图书馆和几个web服务,它们都是图书馆的消费者。该库定义了数据库模型,然后web服务都可以访问和操作这些模型 这是我的库的build.gradle文件: plugins { id 'org.jetbrains.kotlin.jvm' version '1.4.10' } group 'org.bioround' version '1.0-SNAPSHOT' repositories { mavenCentral() jcenter() }

我正在建立一个Kotlin图书馆和几个web服务,它们都是图书馆的消费者。该库定义了数据库模型,然后web服务都可以访问和操作这些模型

这是我的库的
build.gradle
文件:

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.4.10'
}

group 'org.bioround'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib"

    api "org.jetbrains.exposed:exposed-core:$exposed_version"
    api "org.jetbrains.exposed:exposed-dao:$exposed_version"
    api "org.jetbrains.exposed:exposed-jdbc:$exposed_version"

    implementation "mysql:mysql-connector-java:$mysqlconnector_version"
    implementation "com.zaxxer:HikariCP:$hikaricp_version"
}
注意
org.jetbrains.exposed
依赖项是如何声明为
api
依赖项的,因为我想访问这些依赖项在web服务中提供的方法

这是我的一个消费者的
build.gradle
文件,我在其中声明
mylibrary
为本地依赖项:

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.4.10'
}

group 'org.bioround'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib"

    implementation files("../mylibrary/build/libs/mylibrary-1.0-SNAPSHOT.jar")
}
但是,我无法从消费者服务中的
org.jetbrains.exposed
访问这些方法。我希望这些方法是可用的,因为我在我的库中将它们声明为
api
依赖项


我做错了什么?

文件依赖项是不可传递的,因为
.jar
文件不存储任何依赖项信息。您的消费项目根本无法知道所消费项目的依赖关系

有几种方法可以解决您的问题:

如果项目是强耦合的(例如,如果它们位于同一SCM存储库中),则可以使用。这意味着,您的所有项目都使用
include(…)
在中心
settings.gradle
文件中注册。然后,使用
依赖项
块内的
项目(…)
项目可能依赖于其他项目:

dependencies {
    implementation project(':mylibrary')
}
如果您的项目不是直接相关的,但是您仍然希望同时开发这两个项目,那么可以使用。这样,您可以在不考虑其他项目的情况下设计项目的构建,但仍然可以使用
includebild(…)
settings.gradle
文件中包含它们以立即加载任何更改。项目依赖项可以表示为模块依赖项(定义组、工件和版本),但将被包含的构建自动替换

dependencies {
    implementation 'com.example:mylibrary:1.0.0'
}
最后一种可能是将已使用的项目实际包含为外部模块。要使其工作,每次更改时必须将已使用的项目发布到Maven存储库,例如本地Maven存储库。只需将Maven Publish插件应用于已使用的项目
插件{id'Maven Publish'}
,并调用任务
PublishToAvenLocal
。然后,只要注册了本地Maven存储库,就可以使用上面显示的相同依赖关系表示法来使用它:

repositories {
    mavenLocal()
}
这种方法的缺点是每次更改都必须发布已使用的项目,而使用多项目或复合构建将自动重建已使用的项目

dependencies {
    implementation 'com.example:mylibrary:1.0.0'
}