הנה דוגמה מהירה להמחשת השימוש במאגרי נתונים זמניים של פרוטוקולים בפרויקט.
הגדרה פשוטה של מאגר נתונים זמני בפרוטוקולים, 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 ו-
קוד Objective-C באמצעות --j2objc_out. הערך שצוין בכל דגל הוא ספריית הפלט עבור
את שפת היעד. אפשר ליצור את שתי שפות הפלט באותה פקודה.
$J2OBJC_HOME/j2objc_protoc --java_out=java --j2objc_out=objc geo.protols java Geo.javals objc Geo.h Geo.m
צריך להדר את קובצי ה-proto שנוצרו של 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 כרגיל ומוסיפים את פרוטוס ה-Java המקומפל לנתיב הכיתה.
$J2OBJC_HOME/j2objc -cp classes:$J2OBJC_HOME/lib/protobuf_runtime.jar -d objc Hello.javals objc Geo.h Geo.m Hello.h Hello.m
עכשיו יש לנו את כל המקורות של Objective-C בהדרה וקישור. צריך לקשר עם libprotobuf_runtime.a כדי לכלול את סביבת זמן הריצה של protobuf.
$J2OBJC_HOME/j2objcc -lprotobuf_runtime -o hello objc/*.m./hello Hello name: "CN Tower" latitude: 43.6412 longitude: -79.3884