PDA

View Full Version : الصاق کتابخانه ها در فایل jar بوسیله ant



trustmiracle
سه شنبه 31 اردیبهشت 1392, 18:35 عصر
من شروع کردم به نوشتن یک برنامه جاوا با notepad++ و برای کامپایلش هم از ant استفاده می کنم. حالا من برام یک سوال پیش اومده. وقتی با نت بینز یک برنامه می نویسی فایل jar تولیدی را که باز کنی یک پوشه به نام lib داره که تو این پوشه کتابخانه هایی که تو برنامه ازشون استفاده شده را قرار میده.
من هم کنار پوشه src ام یک پوشه به نام lib قرار دادم و فایل های jar ای که تو برنامه ام نیاز دارم را داخلش قرار میدم بعد با استفاده از path و classpathref توی فایل build.xml معرفیشون می کنم. وقتی برنامه را کامپایل می کنم و فایل jar می سازم بدون مشکل انجام میده و فایل jar را هم تولید می کنه. منتها وقتی من فایل jar را باز می کنم می بینم کلاس ها و پکیج هام هستند ولی خبری از کتابخانه های که ازشون استفاده مردم نیست.
حالا من کجای کار را اشتباه کردم

این یک نمونه از فایل build.xml ای که استفاده کردم:


<project name="Ramznegar" basedir=".">

<property name="src.dir" value="src" />
<property name="build.dir" value="build" />
<property name="classes.dir" value="${build.dir}/classes" />
<property name="jar.dir" value="${build.dir}/jar" />
<property name="lib.dir" value="lib" />
<property name="main-class" value="UI.Ramznegar" />

<path id="bl">
<fileset dir="../BusinessLayer/build/jar" includes="*.jar" />
<fileset dir="../DataAccessLayer/build/jar" includes="*.jar" />
</path>

<target name="clean">
<mkdir dir="${build.dir}" />
</target>

<target name="compile" depends="clean">
<mkdir dir="${classes.dir}" />
<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="bl" />
</target>

<target name="jar" depends="compile">
<mkdir dir="${jar.dir}" />
<jar file="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}" />
</manifest>
</jar>
</target>

<target name="run" depends="jar">
<java jar="${jar.dir}/${ant.project.name}.jar" fork="true" />
</target>

</project>

همایون افشاری
پنج شنبه 02 خرداد 1392, 19:33 عصر
چرا توی قسمت path کل فایل های مسیر lib رو تعریف نکردید؟
ضمن اینکه این قسمت :

<target name="jar" depends="compile">
<mkdir dir="${jar.dir}" />
<jar file="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}" />
</manifest>
</jar>
</target>

باید اینجوی بشه:


<target name="jar" depends="compile">
<mkdir dir="${jar.dir}" />
<jar file="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<zipgroupfileset dir="${lib.dir}" includes="**/*.jar" />
<manifest>
<attribute name="Main-Class" value="${main-class}" />
</manifest>
</jar>
</target>

trustmiracle
پنج شنبه 02 خرداد 1392, 23:52 عصر
چرا توی قسمت path کل فایل های مسیر lib رو تعریف نکردید؟
ضمن اینکه این قسمت :

<target name="jar" depends="compile">
<mkdir dir="${jar.dir}" />
<jar file="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}" />
</manifest>
</jar>
</target>

باید اینجوی بشه:


<target name="jar" depends="compile">
<mkdir dir="${jar.dir}" />
<jar file="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<zipgroupfileset dir="${lib.dir}" includes="**/*.jar" />
<manifest>
<attribute name="Main-Class" value="${main-class}" />
</manifest>
</jar>
</target>


آخه تو پوشه lib دیگه زیر پوشه نداشتم و هرچی کتابخانه بود همانجا بود. چند روز پیش پاسخ را توی overflow دیدم که یادم رفت اینجا هم بگذارم. با جوابی که شما دادین برابر هست. ممنون بابت راهنمایی.