استخدام مخازن البروتوكولات المؤقتة

فيما يلي مثال سريع لتوضيح كيفية تضمين الموارد الاحتياطية للبروتوكولات في مشروعك.

إليك تعريفًا بسيطًا للمخزن المؤقت للبروتوكول، geo.proto:

syntax = "proto2";

message Location {
  optional string name = 1;
  optional double latitude = 2;
  optional double longitude = 3;
}

وبرنامج Java الرئيسي لدينا، Hello.java:

class Hello {
  public static void main(String[] args) {
    Geo.Location.Builder locationBuilder = Geo.Location.newBuilder();
    locationBuilder.setName("CN Tower");
    locationBuilder.setLatitude(43.6412172);
    locationBuilder.setLongitude(-79.3884058);
    Geo.Location location = locationBuilder.build();
    System.out.println(location.toString());
  }
}

أولاً، "مشروع" صغير الإعداد:

export J2OBJC_HOME=~/j2objc    # Change to where the j2objc distribution was unzipped.
ls $J2OBJC_HOME/j2objc         # Fix above definition until this command works.
mkdir java objc classes        # Output directories

بعد ذلك، استخدِم j2objc_protoc لإنشاء مخازن البروتوكولات المؤقتة. إنشاء رمز Java باستخدام --java_out و رمز الهدف جـ مع --j2objc_out. إن القيمة المحددة بكل علامة هي دليل الإخراج اللغة الهدف. ويمكن إنشاء لغتَي الإخراج باستخدام الأمر نفسه.

$J2OBJC_HOME/j2objc_protoc --java_out=java --j2objc_out=objc geo.proto
ls java
Geo.java
ls objc
Geo.h Geo.m

يجب تجميع ملفات نموذج Java التي تم إنشاؤها حتى يتم حل الإشارات إليها في Hello. يتم ذلك باستخدام javac بحيث لا تتم ترجمتها إلى الهدف ج في الخطوة التالية.

javac -source 1.8 -target 1.8 -bootclasspath $J2OBJC_HOME/lib/jre_emul.jar -cp $J2OBJC_HOME/lib/protobuf_runtime.jar -d classes java/*.java
ls classes/
Geo$1.class                 Geo$Location$Builder.class  Geo$LocationOrBuilder.class
Geo$Location$1.class        Geo$Location.class          Geo.class

ترجم مصادر Java كالمعتاد، مع إضافة نماذج جافا المجمعة إلى المسار classpath.

$J2OBJC_HOME/j2objc -cp classes:$J2OBJC_HOME/lib/protobuf_runtime.jar -d objc Hello.java
ls objc
Geo.h   Geo.m   Hello.h Hello.m

الآن لدينا جميع مصادر الهدف جـ للتجميع والربط. ستحتاج إلى الربط libprotobuf_runtime.a لتضمين وقت تشغيل Protobuf.

$J2OBJC_HOME/j2objcc -lprotobuf_runtime -o hello objc/*.m
./hello Hello
name: "CN Tower"
latitude: 43.6412
longitude: -79.3884