سؤال

أنا استخدم ensciate لإنشاء API Rest النموذجية والحاجة إلى تضمين جرة تحتوي على رمز مخصص كمكتبة.

يبدو أن نص النمل الخاص بي:

<!--include all jars-->
<path id="en.classpath">
    <fileset dir="${lib}">
        <include name="**/*.jar" />
    </fileset>
</path>

<!--define the task-->
<taskdef name="enunciate" classname="org.codehaus.enunciate.main.EnunciateTask">
    <classpath refid="en.classpath" />
</taskdef>

<mkdir dir="${dist}" />

<enunciate dir="${src}" configFile="${basedir}/enunciate.xml">
    <include name="**/*.java" />
    <classpath refid="en.classpath"/>
    <export artifactId="spring.war.file" destination="${dist}/${war.name}" />
</enunciate>

المشكلة هي أن جرة مخصصة يتم استبعادها من ملف الحرب. من الضروري تجميع الفصول الملحوظة الملحقة ، بحيث تكون الجرة على درجة الفئة في وقت الترجمة ، لكن التفتيش يفشل في تضمينه في التوزيع. لقد لاحظت أيضًا أنه لا يتم تضمين العديد من الجرار اللازمة عن طريق التحويل في ملف الحرب.

لماذا يتم استبعادهم وكيف يمكنني إصلاحه؟

هل كانت مفيدة؟

المحلول 2

كما اتضح أن إحدى الجرار التي نحاول تضمينها لها تبعية مدرجة في ملفه الواضح لجرة يعتمد عليها (Freemarker). يستبعد ANCENCIATE تلقائيًا علامة الجاذبية ، ويبدو أن للوهلة الأولى كما لو أنه يستبعد تلقائيًا أي شيء يعتمد على علامة الجاذبية أيضًا. إذا قمت بإزالة علامة freemarker من قائمة الجرار التابعة في ملف Code الخاص بنا ، فإنه يعمل بشكل جيد.

لكن؛ لقد تحدثت مع المطور الرئيسي لـ ANNUNCIATE (Ryan Heaten) وهو يؤكد لي أن هذا ليس ما يحدث. بما في ذلك رده أدناه:

حقًا؟!

رائع. مثير للإعجاب. لا أستطيع أن أشرح ذلك ؛ لا ينظر ANNUNCIATE إلى ما هو في البيان من أجل تحديد ما يجب تضمينه في الحرب ، لذلك أنا نوع من الإرهاق هنا. يمكن أن يكون أيضًا بعض سلوك النمل الغريب (لا يشمل ذلك الجرة في مرجع "en.classpath" لسبب ما).

~ ريان

نصائح أخرى

لم أستخدم الملاحظة أبدًا ، ولكن كاختراق سريع ، يمكنك إضافة الجرار إلى الحرب:

<jar jarfile="${dist}/${war.name}" update="true">
   <fileset dir="${lib}">
        <include name="**/*.jar" />
    </fileset>
</jar>

ملاحظة: ربما تريد إضافة الجرار إلى ويب-إنف/ليب الدليل ، بدلا من الدليل الجذر.

أظن أن ANNUNCIATES يقوم بتدخل Mininum في عملية الإنشاء الخاصة بك ، لأنك تعرف أفضل ما يجب وضعه في ملف JAR الخاص بك.

في enunciate.xml أخبرها بعدم نسخ أي libs نفسها:

<webapp doLibCopy="false">

ثم في ملف إنشاء ANT في نهاية المهمة المتعددة ، أقوم بتحديث الحرب (يمكنك القيام بذلك لتحديث الجرار المتضمنة/المستبعدة سواء أكنت قد قمت بنسخ الجرار لك في الخطوة أعلاه):

<war destfile="build-output/{mywar}" update="true">
    <lib dir="WebContent/WEB-INF/lib">
        <include name="**/*.jar" />
    </lib>
    <lib dir="build-output">
        <include name="some_other.jar" />
    </lib>
</war>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top