مدیریت Dependency ها در جاوا - قسمت اول: دنیای بدون Maven

در پست قبلی نحوه نصب و استفاده اولیه از Apache Maven را بررسی کردیم. در این پست قصد داریم جزئیات بیشتری از این ابزار و همچنین نکاتی از پیکربندی (configuration) که به ما در بهبود و نگهداری محیط توسعه نرم افزار کمک می کند را بررسی کنیم.دنیای بدون Maven...فرض کنید قصد داریم نرم افزار Java تولید کنیم که یک رشته متن را درون سلولی از Sheet فایل Microsoft Excel (با پسوند xlsx) ذخیره کند و برای این منظور می خواهیم از کتابخانه Apache POI استفاده کنیم.ابتدا پروژه ای با نام string-to-excel در Eclipse IDE ایجاد می کنیم (نصب و ایجاد پروژه در Eclipse IDE).برای اینکه کار هر چه ساده تر انجام بشه و به اصل موضوع (یعنی مدیریت Dependency ها) بپردازیم، کلاسی شامل متد اجرایی main ایجاد می کنیم که کد برنامه را برای استفاده از Apache POI در آن بنویسیم. (مثلا کلاسی بنام App)ایجاد کلاسی با نام App و افزودن متد main به آن خوب همانطور که در بالا گفتیم قرار هست از کتابخانه Apache POI برای تولید فایل Excel و ذخیره رشته در سلول یک Sheet استفاده کنیم.در اینجا باید JAR file های مورد نیاز Apache POI را به Classpath پروژه اضافه کنیم تا بتوانیم از این کتابخانه در زمان compile و runtime (اجرای برنامه) استفاده کنیم.پس، نسخه جدید (در حال حاضر 4.1.2) POI را دانلود می کنیم و بعد از unzip کردن، فایل های jar زیر را که در شاخه اصلی و ooxml-lib قرار دارند را در شاخه پروژه کپی می کنیم:poi-4.1.2.jar poi-ooxml-4.1.2.jar poi-ooxml-schemas-4.1.2.jar ooxml-lib\xmlbeans-3.1.0.jar ooxml-lib\curvesapi-1.06.jar می توانیم پوشه ای بنام lib در شاخه پروژه ایجاد کنیم و فایل ها را در آن کپی کنیم.ذکر این نکته لازم است که کتابخانه Apache POI نیازمند jar file های دیگری از جمله ، commons-collection، commons-logging و ... می باشد. وجود این jar file ها در کنار poi برای استفاده از آن ضروری می باشد. بنابراین باید محتویات پوشه lib موجود در شاخه poi-4.1.2 را نیز در پوشه lib پروژه خود اضافه کنیم:حالا باید برای Eclipse IDE مشخص کنیم که در زمان نوشتن کد، compile و runtime از این jar file ها که در شاخه lib پروژه هستند استفاده کند. نکته: برای شناسایی پوشه lib توسط Eclipse باید ابتدا بر روی پروژه در قسمت Package Explorer کلیک راست و گزینه Refresh را انتخاب کنیم.معرفی شاخه lib پروژه به Eclipseبرای این کار روی عنوان پروژه در قسمت Package Explorer کلیک راست می کنیم، سپس Properties را انتخاب می کنیم و بعد قسمت Java Build Path و در سمت راست Libraries را انتخاب می کنیم:برای معرفی jar file ها (قرار دادن آنها در Classpath) در Eclipse روش های مختلفی وجود دارد که ما در اینجا از گزینه Add JARs... استفاده می کنیم. روی Classpath کلیک می کنیم و سپس گزینه Add JARs... و در پنجره باز شده از lib پروژه تمامی jar ها را select و OK می کنیم:در نهایت باید لیستی از jar های اضافه شده به Classpath را داشته باشیم:با انتخاب Apply and Close و بازگشت به Package Explorer می توانیم لیست jar file های اضافه شده به پروژه را مشاهده کنیم:حالا امکان استفاده از API کتابخانه Apache POI وجود دارد و می توان با در زمان نوشتن کد برنامه، Compile و Runtime از امکانات Apache POI برای ایجاد یک فایل Excel و نوشتن یک رشته در یک سلول آن استفاده کرد:import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; public class App { public static void main(String[] args) throws IOException { FileOutputStream out = new FileOutputStream(&quotd:\\workbook.xlsx&quot); SXSSFWorkbook workbook = new SXSSFWorkbook(); Sheet sh = workbook.createSheet(); Row row = sh.createRow(0); Cell cell = row.createCell(0); cell.setCellValue(&quotViva Excel&quot); workbook.write(out); out.close(); } }نتیجه گیری: دنیا با Maven جای بهتری هست...مراحل فوق که شامل ایجاد پروژه در Eclipse، دانلود Apache POI، کپی کردن jar file های مورد نیاز در پروژه و معرفی آنها به Classpath در Eclipse می باشد همه بصورت دستی انجام شده است. و اگر به عنوان مثال در پروژه قصد اضافه کردن یک کتابخانه جدید داشته باشیم، باید jar file ها را در شاخه lib پروژه کپی و مجددا به Eclipse معرفی کنیم و اگر این کتابخانه ها از jar های مشترکی استفاده کنند کار کمی پیچیده می شود. یکی از مواردی که مدیریت آن در پروژه بدون استفاده از ابزاری نظیر Maven دشوار می شود، مدیریت dependency های مشترک چندین کتابخانه هست. تصور کنید در پروژه ای از چندین کتابخانه استفاده می کنیم که هر کدام به نسخه ای از commons-logging نیاز دارند و تداخل نسخه های مختلف اجتناب ناپذیر است! اینجا جایی هست که ابزار Maven (که قبلا آن را معرفی کردیم) به ما کمک می کند.در واقع مهم ترین ویژگی Maven سهولت مدیریت کتابخانه های مورد نیاز (Dependency ها) در چرخه تولید و انتشار نرم افزارهای مبتنی بر Java می باشد.در پست بعدی قصد داریم مراحل فوق را با استفاده از Maven به انجام برسانیم و با امکانات و مزایای این ابزار بیشتر آشنا می شویم.