簡體   English   中英

從kotlin引用時,Java文件的未解析引用具有不同的風格

[英]Unresolved reference for Java file in a different flavor when referencing from kotlin

問題:

這個問題很可能已經從所有其他類似的問題中得到了回答,但我似乎無法讓它發揮作用。

  • 如果我從主源集中的java文件引用另一種風格(不同的源集)中的特定java文件,它就可以工作。

  • 如果我嘗試從主源集中的Kotlin文件引用同一個文件,則會抱怨它無法看到它(“未解析的引用”)。

  • 如果我將相同的文件移動到主源設置它是有效的(所以它不是文件本身)。

  • 如果我將Java文件轉換為Kotlin它可以工作(這是我目前的解決方案),但我想知道為什么它不起作用,因為轉換並不總是那么容易,它應該可以在沒有轉換的情況下工作。

根據我的谷歌搜索它似乎與Gradle中的源集相關,但我不想在Java文件夾旁邊有一個單獨的Kotlin文件夾,所以我不確定我是否需要這個。 另外,我同時擁有Java和Kotlin的另一個項目沒有配置並且工作正常。

我正在使用帶有flavorDimensions的productFlavors,並且有一個名為“dimension1Dimension2”的源集(這是我試圖引用的Java文件所在的位置)。

看下面的設置,我可能做錯了什么或丟失了什么? 這個項目主要是Java,所以我剛剛開始添加Kotlin。 我看不出與我的其他項目有什么不同,主要是Kotlin和一些Java。

另一件奇怪的事情是它適用於三種口味中的一種。 維度1有兩種類型,維度2有三種類型。 只有其中一個維度類型有效。

也許代碼更清晰:

flavorDimensions "product", "mode"    
productFlavors {
        mock { // only this one works (e.g. <company_name>Mock is the source set)
            applicationIdSuffix = ".mock"
            dimension "mode"
        }
        dev {
            applicationIdSuffix = ".dev"
            dimension "mode"
        }
        prod {
            dimension "mode"
        }
        demo {
            applicationIdSuffix = ".demo"
            dimension "product"
            buildConfigField "String", "UPDATE_DIRECTORY", "\"/release/\""
            buildConfigField "boolean", "SHOW_STREAM_STATUS", "false"
        }
        <company_name> {
            applicationIdSuffix = ".<company_name>"
            dimension "product"
        }
    }

建立:

  • Kotlin版本:1.2.21
  • Gradle版本:3.0.1
  • 插件:
    • apply plugin:'kotlin-android'
    • 申請插件:'kotlin-kapt'
    • apply plugin:'kotlin-android-extensions'
  • 項目級依賴項:
    • classpath“org.jetbrains.kotlin:kotlin-gradle-plugin:$ kotlin_version”
  • 應用程序級依賴項:
    • 實現“org.jetbrains.kotlin:kotlin-stdlib-jdk8:$ kotlin_version”
  • 在項目設置中使用Java 8

所以我遇到了同樣的問題,因為我們的應用程序是一個生產應用程序,我不能隨時改變Kotlin的所有內容,我們也沒有時間立即改用Kotlin - 遺留代碼現在應該保留Java最小。

我向Google報告了一個錯誤: https//issuetracker.google.com/issues/110100405

而且,一位Google工程師實際上非常快地回答了我的錯誤報告:-)

如果你不想閱讀我們的對話,我會簡短地說:

TL; DR版本:

這與Kotlin無法合作的原因是因為您的軟件包設置錯誤。 我敢打賭,在你的某些風格中,你和我一樣犯了同樣的錯誤並創建了com.example.mypackage這樣的directories而不是創建名為com的父目錄,然后創建一個名為example的子目錄,然后是子目錄名為mypackage

因此,如果您的文件夾看起來像com.example.mypackage將它們更改為com與子目錄,所有應該沒問題。

另一個可能最簡單的解決方案是在不同的版本中創建名為com.example.mypackage包,但只有當您選擇了要為其創建包的樣式時才能這樣做。

至於為什么,這不會產生Java的問題,我不知道,谷歌人也沒有,但它可能是一個IntelliJ問題,我將向JetBrains報告,除非他們已經意識到它。

這也是一個很大的問題,Kotlin編譯器只是吐出一個模糊的錯誤,說明Unresolved reference ,但這是另一天的談話和另一個錯誤報告或增強。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM