منابع جاوا چیست؟
منابع جاوا فایل های داده ای هستند که با برنامه ها و کتابخانه های جاوا بسته بندی شده اند. این منابع در زمان اجرا بارگذاری می شوند یا 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 همان منبع را با استفاده از یک مسیر مطلق و سپس یک مسیر نسبی بارگیری می کند. منبع آزمون با استفاده از این مرحله ساخت فایل های کپی گنجانده شده است: