2017-07-20 43 views
6

mam taki błąd podczas kompilacji:kapt nie rozwiąże protobuf wygenerowanych klas

e: /Users/some/path/SomeClass.java:86: error: cannot find symbol 
e:  
e:  static ConnectionType getConnectionType(Context context) { 
e:   ^
e: symbol: class ConnectionType 
e: location: class SomeClass 

Gdzie ConnectionType jest klasa generowane przez Protobuf. Wygląda więc na to, że kape nie rozdziela wygenerowanych klas.

Co próbowałem?

Początkowo dodałem kotlin-apt wtyczki:

apply plugin: 'kotlin-kapt' 

Potem dodaną brotobuf generowanych klas zestawie źródło:

sourceSets { 
    main.java.srcDirs += 'src/main/kotlin' 
    main.java.srcDirs += 'build/generated/source/proto/main/java' 
} 

A także chcę mieć wygenerowanych klas przed rozpoczęciem kapt to praca . Więc zamawiam takie zadania w taki sposób:

afterEvaluate { 
    def protoTasks = [] 
    tasks.each { task -> 
     if (task.name.contains('proto') || task.name.contains('Proto')) { 
      protoTasks.push(task) 
     } 
    } 

    tasks.each { task -> 
     if (task.name.startsWith('kapt')) { 
      task.dependsOn protoTasks 
     } 
    } 
} 

Ale te wszystkie rzeczy nie pomagają, nadal mam ten sam błąd. Jak to rozwiązać?

+0

Czy jesteś pewien, że klasy są generowane? Więc możesz zobaczyć plik 'class' dla np. "ConnectionType" w folderze klasy wyjściowej? – guenhter

+0

@guenhter Widzę tylko pliki '.java', ale nie pliki' .class'. – VasyaFromRussia

+0

Czy widzisz plik 'SomeClass.class' swojej klasy? – guenhter

Odpowiedz

1

Błąd został spowodowany przez niewłaściwą ścieżkę do zestawu źródeł protobuf. Musiałem użyć poprawnej nazwy smak w nim, jak:

sourceSets { 
    // ... 
    main.java.srcDirs += 'build/generated/source/proto/flavor/java' 
} 

zamiast

sourceSets { 
    // ... 
    main.java.srcDirs += 'build/generated/source/proto/main/java' 
}