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

في ما يلي مثال سريع لتوضيح كيفية تضمين مخازن البروتوكول المؤقت في مشروعك.

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

syntax = "proto2";

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

وبرنامجنا الرئيسي جافا، 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_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

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

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

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

$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