天天看点

Proto3的在IDEA+Gradle项目集成一、添加IDEA插件方式集成二、手动添加版本集成其他介绍

前文介绍了在Android环境中集成,因为需要对序列化数据文件进行反序列化,所以需要一个java脚本,因此才有了此文,基于IDEA+Gradle集成proto网上也有很简便介绍,直接在IDEA中添加proto插件即可,但怕有版本问题,影响后面反序列化,白折腾,故想自己添加,下面都介绍

一、添加IDEA插件方式集成

在IDEA中依次点击"File"-->"Settings"-->"Plugins"-->"Browse repositories"后,输入Protobuf,找到Protobuf Support后安装重启IDEA即可,*.proto文件将会支持高亮语法显示,此方法网上案例很多,不过多介绍

可参考:

https://www.cnblogs.com/liugh/p/7505533.html

二、手动添加版本集成

1. 新建Gradle项目

以正常方式在IDEA新建一个Gradle项目即可

2. 项目build.gradle配置

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.10'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
plugins {
    id 'java'
}

apply plugin: 'application'
apply plugin: 'com.google.protobuf'

group 'cn.starcart'
version '1.0.1'

sourceCompatibility = 1.8
mainClassName = 'cn.starcart.Main'

sourceSets {
    main {
        java {
            srcDirs 'src/main/java', 'src/generated/main/java'
        }
        proto {
            srcDir 'src/main/proto' //指定.proto文件路径
        }
    }
}

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.8.0'
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                java {
                    option "lite"
                }
            }
        }
    }
    //生成目录
    generatedFilesBaseDir = "$projectDir/src/generated"
}



repositories {
    mavenCentral()
}
tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'

    compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.8.0'


}           

3. 如上gradle文件配置,在src/main下增加proto目录,存放.proto文件

Proto3的在IDEA+Gradle项目集成一、添加IDEA插件方式集成二、手动添加版本集成其他介绍

4. build项目或者执行gradle的build任务即可在src目录下生成generated目录,对应proto文件生成java实体类

其他介绍

proto3语法定义:

https://developers.google.com/protocol-buffers/docs/proto3

proto3和proto2的区别参考:

http://www.cppblog.com/sunicdavy/archive/2016/01/25/212739.html

继续阅读