نحوه نگاشت منابع جاوا به منابع iOS

منابع جاوا چیست؟

منابع جاوا فایل های داده ای هستند که با برنامه ها و کتابخانه های جاوا بسته بندی شده اند. این منابع در زمان اجرا بارگذاری می شوند یا Class.getResource(String name) که یک java.net.URL برمی گرداند، یا Class.getResourceAsStream(String name) که یک java.io.InputStream را برمی گرداند. متد getResourceAsStream() معمولاً زمانی استفاده می‌شود که انتظار می‌رود منبعی در دسترس باشد، زیرا در صورتی که وجود نداشته باشد، یک IOException ایجاد می‌کند. اگر منبع موجود نباشد، متد getResource() null را برمی‌گرداند، بنابراین آزمایش منابع اختیاری مفید است.

نام منابع و مسیرها

J2ObjC منابع را با نگاه کردن به بسته اصلی برنامه ( [NSBundle mainBundle] )، با استفاده از مسیر نسبی یا مطلق منبع، مکان‌یابی می‌کند:

مسیرهای نسبی

روش ترجیحی برای تعیین مسیرهای منبع، استفاده از مسیرهای نسبی است. مسیرهای نسبی با اسلش رو به جلو ('/') شروع نمی شوند. هنگام خواندن یک منبع با یک مسیر نسبی، نام بسته کلاس تغییر می‌کند، نقطه‌های ('.') در نام بسته به اسلش‌های جلو ('/') تغییر می‌کند، سپس مسیر نسبی مشخص شده در Class.getResource(String name) یا فراخوانی روش Class.getResourceAsStream(String name) به مسیر بسته اضافه می شود.

به عنوان مثال، اگر یک برنامه دارای کلاس foo.bar.Mumble باشد، مسیر پایه برای همه منابع نسبت به کلاس های آن بسته /foo/bar است. هنگامی که Mumble.class.getResource("oops/error.jpg") فراخوانی می شود، oops/error.jpg به مسیر بسته اضافه می شود، بنابراین مسیر منبع کامل آن /foo/bar/oops/error.jpg است.

مسیرهای مطلق

همچنین می توان با استفاده از یک مسیر مطلق با شروع نام منبع با اسلش رو به جلو ('/') به یک منبع دسترسی پیدا کرد. نام بسته نادیده گرفته می شود، بنابراین J2ObjC مسیرهای مطلق را در بسته اصلی برنامه با استفاده از مسیرهایی که دقیقاً در Class.getResource(String name) یا Class.getResourceAsStream(String name) در منابع جاوا برنامه مشخص شده است، تعیین می کند. در مثال بالا، Mumble.class.getResource("/oops/error.jpg") یک مسیر منبع کامل از /oops/error.jpg دارد، بدون توجه به نام بسته foo.bar .

افزودن منابع به برنامه iOS

برای افزودن فایل‌های منبع به برنامه iOS در Xcode، برگه مراحل ساخت هدف ساخت را باز کنید. سپس:

  • روی نماد + (در زیر تب General) کلیک کنید و مرحله New Copy Files را انتخاب کنید.
  • "منابع" را به عنوان مقصد انتخاب کنید ( نه منابع جاوا ).
  • دایرکتوری منبع(ها) را مشخص کنید.
  • + را انتخاب کنید و فایل(ها) را به لیست آن اضافه کنید.

صرف نظر از اینکه از مسیرهای منبع نسبی یا مطلق استفاده می شود، هر دایرکتوری منبع نیاز به فاز ساخت Copy Files جداگانه در ساخت Xcode دارد.

مثال

پروژه JreEmulation دارای یک برنامه "JRE JUnit Tests" است که تست های واحد آن کتابخانه را اجرا می کند. فازهای ساخت آن هدف را انتخاب کنید تا چندین فاز Copy Files را ببینید، هر کدام یکی برای هر مسیر نسبی استفاده شده توسط منابع آن. در اینجا، ClassTest.java همان منبع را با استفاده از یک مسیر مطلق و سپس یک مسیر نسبی بارگیری می کند. منبع آزمون با استفاده از این مرحله ساخت فایل های کپی گنجانده شده است:

منابع Xcode