فيما يلي مثال سريع لتوضيح كيفية تضمين الموارد الاحتياطية للبروتوكولات في مشروعك.
إليك تعريفًا بسيطًا للمخزن المؤقت للبروتوكول، 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.protols java Geo.javals 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/*.javals 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.javals 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