По умолчанию зарегистрируйте пакет для класса, сгенерированного из файла proto, в gradle, а не в файле proto - PullRequest
0 голосов
/ 21 сентября 2018

В моем приложении для Android я использую прото файлы.Например, у меня есть файл протока Stats.proto

syntax = "proto3";
package com.me.test;

message Stat {
    string a = 1;
    string b = 2;
    string c = 3;
    string d = 4;
}

Мне нужно зарегистрировать пакет в каждом файле прото, и это неудобно, потому что у меня много файлов.Я хочу зарегистрировать пакет по умолчанию в Gradle, например, «пакет com.me.test», который использует каждый файл, который я создаю.Я нашел решение в javanano

nano {
    proto {
      // Selects between --java_out and --javanano_out, default is 'java'
      mode 'javanano'
      // Options added to --java_out or --javanano_out
      option 'java_package=src/proto/simple-data.proto|my_package'
      option 'java_outer_classname=src/proto/simple-data.proto|OuterName'
      // Apply the 'grpc' plugin defined in protobufNativeCodeGenPluginDeps
      plugin 'grpc' {
        // Options added to --grpc_out
        option 'nano=true'
      }
    }

Но мне нужно использовать javalite

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.0.0'
    }
    plugins {
        javalite {
            artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0'
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                remove java
            }
            task.plugins {
                javalite { }
            }
        }
    }
}

И я хочу иметь аналогичную логику

option 'java_package=src/proto/simple-data.proto|my_package'

как javanano в javalite

Могу ли я реализовать это?

1 Ответ

0 голосов
/ 24 сентября 2018

В соответствии с документом и при условии, что javalite поддерживает те же функции, что и java (это длинный путь, поскольку я не нашел никаких следов документации по этому плагину), просто попробуйте это:

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.0.0'
    }
    plugins {
        javalite {
            artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0'
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                remove java
            }
            task.plugins {
                javalite {
                    option 'java_package=.......'                 
                }
            }
        }
    }
}

edit: попробуйте сделать это для проверки объекта:

task.plugins {
    javalite {
        it.properties.each { println "$it.key -> $it.value" }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...