使用以下文章作为引用,将我原来的 Kotlin Gradle 脚本从使用 groovy 转换为使用 Kotlin DSL: A Better way to Manage Gradle Build Script 和 Migrating Gradle Build Scripts to Kotlin DSL .编译我的代码后,出现以下构建错误。
ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could
not resolve project :app.
Show Details
Affected Modules: app
ERROR: Unable to resolve dependency for
':app@debugAndroidTest/compileClasspath': Could not resolve project :app.
Show Details
Affected Modules: app
ERROR: Unable to resolve dependency for
':app@debugUnitTest/compileClasspath': Could not resolve project :app.
Show Details
Affected Modules: app
ERROR: Unable to resolve dependency for ':app@release/compileClasspath':
Could not resolve project :app.
Show Details
Affected Modules: app
ERROR: Unable to resolve dependency for
':app@releaseUnitTest/compileClasspath': Could not resolve project :app.
Show Details
Affected Modules: app
过去在这个平台上提出的问题有建议,
我已尝试使用建议的解决方案来解决问题。 我的应用程序模块的 build.gradle 如下:
plugins {
id(Plugins.androidApplication)
kotlin(Plugins.kotlinAndroid)
kotlin(Plugins.kotlinExtensions)
kotlin(Plugins.kapt)
}
android {
compileSdkVersion(Configs.compileVersion)
defaultConfig {
applicationId = Configs.applicationId
minSdkVersion(Configs.minSdkVersion)
targetSdkVersion(Configs.targetSdkVersion)
testInstrumentationRunner = Configs.testInstrumentationRunner
var value = Integer.parseInt(project.property("build_version_code") as String?)
versionCode = value
versionName = project.property("build_version") as String?
}
signingConfigs {
getByName("debug") {
}
create("release") {
}
}
buildTypes {
getByName("debug") {
buildConfigField("boolean", "MOCK_HARDWARE", "false")
signingConfig = signingConfigs.findByName("debug")
applicationIdSuffix = ".debug"
matchingFallbacks = listOf("debug")
}
getByName("release") {
isMinifyEnabled = false
buildConfigField("boolean", "MOCK_HARDWARE", "false")
proguardFiles(getDefaultProguardFile(ProGuards.proguardTxt), ProGuards.androidDefault)
signingConfig = signingConfigs.findByName("release")
matchingFallbacks = listOf("release")
}
dataBinding {
isEnabled = true
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}
repositories {
flatDir {
dirs("libs")
}
}
dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to
listOf("*.jar", "*.arr"))))
implementation(Libs.stdLib)
implementation(Libs.sunmiui)
implementation(Libs.slf4j)
implementation(Libs.appCompact)
implementation(Libs.otpView)
implementation(Libs.vectordrawableAnimated)
implementation(Libs.materialComponents)
implementation(Libs.recyclerView)
implementation(Libs.constraintLayout)
implementation(Libs.junit)
implementation(Libs.testRunner)
implementation(Libs.expressoCore)
implementation(Libs.lifecyleExtensions)
kapt(Libs.lifecyleCompiler)
implementation(Libs.roomRuntime)
implementation(Libs.databindingCompiler)
implementation(Libs.rxjava)
implementation(Libs.rxjavaAndroid)
implementation(Libs.glide)
implementation(Libs.glideCompiler)
implementation(Libs.gson)
implementation(Libs.joda)
implementation(Libs.countrycodePicker)
implementation(Libs.timber)
implementation(Libs.daggerandroidSupport)
implementation(Libs.daggerandroidProcessor)
}
我的Dependecies.kts如下:
object Versions
{
// kotlin
const val kotlin = "1.3.31"
const val buildToolsVersion = "28.0.3"
const val lifecycleExtensionVersion = "2.0.0"
const val lifecyleCompilerVersion = "2.0.0"
const val stdLibVersion = "1.3.21"
const val otpViewVersion = "2.0.3"
const val appCompactVersion = "1.1.0-alpha05"
const val constraintLayoutVersion = "2.0.0-beta1"
const val materialComponentsVersion = "1.1.0-alpha06"
const val recyclerViewVersion = "1.0.0"
const val junitVersion = "4.12"
const val testRunnerVersion = "1.1.1"
const val expressoCoreVersion = "3.1.1"
const val roomRuntimeVersion = "2.1.0-alpha04"
const val databindingCompilerVersion = "3.5.0-alpha06"
const val rxjavaVersion = "2.2.7"
const val rxjavaAndroidVersion = "2.1.1"
const val glideVersion = "4.8.0"
const val glideCompilerVersion = "4.8.0"
const val gsonVersion = "2.8.5"
const val jodaVersion = "2.7.2"
const val countrycodePickerVersion = "2.3.0"
const val timberVersion = "4.7.1"
const val daggerandroidSupportVersion = "2.19"
const val daggerandroidProcessorVersion = "2.19"
const val slf4jVersion = "1.7.21"
const val vectordrawableAnimatedVersion = "1.1.0-beta01"
const val sunmiuiVersion = "1.1.27"
}
object Libs
{
const val lifecyleExtensions = "androidx.lifecycle:lifecycle-extensions:${Versions.lifecycleExtensionVersion}"
const val lifecyleCompiler = "androidx.lifecycle:lifecycle-compiler:${Versions.lifecyleCompilerVersion}"
const val stdLib = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${Versions.kotlin}"
const val otpView = "com.github.mukeshsolanki:android-otpview-pinview:${Versions.otpViewVersion}"
const val appCompact = "androidx.appcompat:appcompat:${Versions.appCompactVersion}"
const val constraintLayout = "androidx.constraintlayout:constraintlayout:${Versions.constraintLayoutVersion}"
const val materialComponents = "com.google.android.material:material:${Versions.materialComponentsVersion}"
const val recyclerView = "androidx.recyclerview:recyclerview:${Versions.recyclerViewVersion}"
const val junit = "junit:junit:${Versions.junitVersion}"
const val testRunner = "androidx.test:runner:${Versions.testRunnerVersion}"
const val expressoCore = "androidx.test.espresso:espresso-core:${Versions.expressoCoreVersion}"
const val roomRuntime = "androidx.room:room-runtime:${Versions.roomRuntimeVersion}"
const val databindingCompiler = "androidx.databinding:databinding-compiler:${Versions.databindingCompilerVersion}"
const val rxjava = "io.reactivex.rxjava2:rxjava:${Versions.rxjavaVersion}"
const val rxjavaAndroid = "io.reactivex.rxjava2:rxandroid:${Versions.rxjavaAndroidVersion}"
const val glide = "com.github.bumptech.glide:glide:${Versions.glideVersion}"
const val glideCompiler = "com.github.bumptech.glide:compiler:${Versions.glideCompilerVersion}"
const val gson = "com.google.code.gson:gson:${Versions.gsonVersion}"
const val joda = "net.danlew:android.joda:${Versions.jodaVersion}"
const val countrycodePicker = "com.github.joielechong:countrycodepicker:${Versions.countrycodePickerVersion}"
const val timber = "com.jakewharton.timber:timber:${Versions.timberVersion}"
const val daggerandroidSupport = "com.google.dagger:dagger-android-support:${Versions.daggerandroidSupportVersion}"
const val daggerandroidProcessor = "com.google.dagger:dagger-android-processor:${Versions.daggerandroidProcessorVersion}"
const val slf4j = "org.slf4j:slf4j-api:${Versions.slf4jVersion}"
const val vectordrawableAnimated = "androidx.vectordrawable:vectordrawable-animated:${Versions.vectordrawableAnimatedVersion}"
const val sunmiui = "com.sunmi:sunmiui:${Versions.sunmiuiVersion}"
}
object Plugins
{
const val androidApplication = "com.android.application"
const val kotlinAndroid = "android"
const val kotlinExtensions = "android.extensions"
const val kapt = "kapt"
}
object ProGuards
{
val androidDefault = "proguard-rules.pro"
val proguardTxt = "proguard-android.txt"
}
object ClassPaths
{
const val gradlePlugin = "com.android.tools.build:gradle:3.4.1"
const val kotlinPlugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.31"
}
object Configs
{
const val applicationId = "eteetetet"
const val compileVersion = 28
const val minSdkVersion = 24
const val targetSdkVersion = 28
const val testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
我的项目模块的build.gradle如下:
buildscript {
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath(ClassPaths.gradlePlugin)
classpath(ClassPaths.kotlinPlugin)
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
google()
mavenCentral()
maven {
url = uri("https://plugins.gradle.org/m2/")
}
maven {
url = uri("https://maven.google.com")
}
maven { url = uri("https://jitpack.io") }
}
}
tasks.register("clean", Delete::class) {
delete(rootProject.buildDir)
}
我的settings.gradle.kts文件如下:
include(":app",
":asterixclient",
":asterixtest",
":data",
":hardware",
":registrations",
":rewards",
":rules",
":rulescontracts",
":sdfclient",
":sdfservice",
":sunmiclient",
":sync",
":till",
":tsdevice",
":ui",
":webapi")
project(":asterixclient").projectDir =
File("../modules/sdfservice/asterixclient")
project(":asterixtest").projectDir =
File("../modules/sdfservice/asterixtest")
project(":data").projectDir = File("../modules/data/data")
project(":hardware").projectDir = File("../modules/hardware/hardware")
project(":registrations").projectDir = File("../modules/registrations/app")
project(":rewards").projectDir = File("../modules/rewards/rewards")
project(":rules").projectDir = File("../modules/rules/rules")
project(":rulescontracts").projectDir =
File("../modules/rules/rulescontracts")
project(":sdfclient").projectDir = File("../modules/sdfservice/sdfclient")
project(":sdfservice").projectDir = File("../modules/sdfservice/sdfservice")
project(":sunmiclient").projectDir =
File("../modules/sdfservice/sunmiclient")
project(":sync").projectDir = File("../modules/sync/sync")
project(":till").projectDir = File("../modules/till/till")
project(":tsdevice").projectDir = File("../modules/sdfservice/tsdevice")
project(":ui").projectDir = File("../modules/ui/ui")
project(":webapi").projectDir = File("../modules/webapi/webapi")
最佳答案
我终于解决了这个问题,我就是这样改变的
首先我更新到最新版本的 Gradle 发行版
#Tue May 14 11:11:48 CAT 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
然后我将应用程序模块的 gradle.buid.kts 更改为如下所示
plugins {
id(Plugins.androidApplication)
kotlin(Plugins.kotlinAndroid)
kotlin(Plugins.kotlinExtensions)
kotlin(Plugins.kapt)
}
android {
compileSdkVersion(Configs.compileVersion)
buildToolsVersion(Versions.buildToolsVersion)
defaultConfig {
multiDexEnabled = true
applicationId = Configs.applicationId
minSdkVersion(Configs.minSdkVersion)
targetSdkVersion(Configs.targetSdkVersion)
val version_code = Integer.parseInt(project.property("build_version_code") as String)
versionCode = version_code
versionName = project.property("build_version") as String
testInstrumentationRunner = Configs.testInstrumentationRunner
proguardFiles(getDefaultProguardFile(ProGuard.proguardTxt), ProGuard.androidDefault)
}
signingConfigs {
named("debug").configure {
storeFile = file(project.property("keyStore") as String)
storePassword = project.property("keystorePassword") as String
keyPassword = project.property("keystorePassword") as String
keyAlias = project.property("keyName") as String
}
register("release") {
storeFile = file(project.property("keyStore") as String)
storePassword = project.property("keystorePassword") as String
keyPassword = project.property("keystorePassword") as String
keyAlias = project.property("keyName") as String
}
}
buildTypes {
named("release").configure {
buildConfigField("boolean", "MOCK_HARDWARE", "false")
proguardFiles(getDefaultProguardFile(ProGuard.proguardTxt), ProGuard.androidDefault)
signingConfig = (signingConfigs.getByName("release"))
matchingFallbacks = listOf("release")
}
named("debug").configure {
buildConfigField("boolean", "MOCK_HARDWARE", "false")
applicationIdSuffix = ".debug"
signingConfig = signingConfigs.getByName("debug")
matchingFallbacks = listOf("debug")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
repositories {
flatDir {
dirs("libs")
}
}
}
dependencies {
implementation(fileTree(mapOf("include" to listOf("*.jar", "*.arr"), "dir" to "libs")))
implementation(Libs.stdLib)
implementation(Libs.sunmiui)
implementation(Libs.slf4j)
implementation(Libs.appCompact)
implementation(Libs.otpView)
implementation(Libs.vectordrawableAnimated)
implementation(Libs.materialComponents)
implementation(Libs.recyclerView)
implementation(Libs.constraintLayout)
implementation(Libs.junit)
implementation(Libs.testRunner)
implementation(Libs.expressoCore)
implementation(Libs.lifecyleExtensions)
annotationProcessor(Libs.lifecyleCompiler)
implementation(Libs.roomRuntime)
annotationProcessor(Libs.databindingCompiler)
implementation(Libs.rxjava)
implementation(Libs.rxjavaAndroid)
implementation(Libs.glide)
annotationProcessor(Libs.glideCompiler)
implementation(Libs.gson)
implementation(Libs.joda)
implementation(Libs.countrycodePicker)
implementation(Libs.timber)
implementation(Libs.daggerandroidSupport)
annotationProcessor(Libs.daggerandroidProcessor)
implementation(project(":data"))
implementation (project( ":ui"))
implementation (project( ":webapi"))
implementation (project(":hardware"))
implementation (project(":sdfclient"))
}
我还更新了 settings.gradle.kts 文件中的项目引用,如下所示:
include(":app",
":data")
project(":data").projectDir = file("../modules/data/data"))
主要变化是签名配置、构建类型和项目中其他模块的引用。 例如
implementation(project(":data"))
代替
implementation(project(path, ":data"))
关于android - 由于转换为使用 Gradle Kotlin DSL,无法解决依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56366798/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t