كيفية دمج jsp قبل تجميعها web.xml جزء الرئيسية web.xml استخدام النمل

StackOverflow https://stackoverflow.com/questions/162079

سؤال

لدينا المعتاد web.xml لدينا التطبيق على شبكة الإنترنت والذي يتضمن بعض jsp و jsp الوسم الملفات.أريد أن التحول إلى استخدام جمعت قبل jsp ؟ يجب قبل تجميع يحدث في بناء حسنا ، فهو يولد web.xml جزء والآن أريد أن دمج جزء في الرئيسية web.xml.

هناك وتشمل نوع التوجيه web.xml التي سوف اسمحوا لي أن تشمل جزء.

من الناحية المثالية سوف أترك الأمور كما هي DEV - كما من المفيد تغيير jsp على الطاير ومعرفة التغييرات على الفور ولكن بعد ذلك ضد التعذيب/PROD, jsp سيكون قبل تجميعها وبالتالي العمل بشكل أسرع.

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

المحلول

يمكنني استخدام هر جاسبر النمل المهام في المشروع الذي precompile على صفحات jsp في سيرفلتس وإضافة الجديد بريمج تعيينات الأصلي web.xml.في ديف يبني فقط تخطي هذه الخطوة ونشر صفحات jsp بدون ما قبل ترجمة و تعديل web.xml.

    <?xml version="1.0"?>
<project name="jspc" basedir="." default="all">
 <import file="${build.appserver.home}/bin/catalina-tasks.xml"/>

 <target name="all" depends="jspc,compile"></target>

 <target name="jspc">
  <jasper
   validateXml="false"
   uriroot="${build.war.dir}"
   webXmlFragment="${build.war.dir}/WEB-INF/generated_web.xml"
   addWebXmlMappings="true"
   outputDir="${build.src.dir}" />
 </target>

 <target name="compile">
  <javac destdir="${build.dir}/classes"
   srcdir="${build.src.dir}"
   optimize="on"
   debug="off"
   failonerror="true"
   source="1.5"
   target="1.5"
   excludes="**/*.smap">
   <classpath>
    <fileset dir="${build.war.dir}/WEB-INF/classes">
     <include name="*.class" />
    </fileset>
    <fileset dir="${build.war.lib.dir}">
     <include name="*.jar" />
    </fileset>
    <fileset dir="${build.appserver.home}/lib">
     <include name="*.jar" />
    </fileset>    
    <fileset dir="${build.appserver.home}/bin">
     <include name="*.jar"/>
    </fileset>
   </classpath>
    <include name="**" />
    <exclude name="tags/**"/>
  </javac>
 </target>

 <target name="clean">
  <delete>
   <fileset dir="${build.src.dir}"/>
   <fileset dir="${build.dir}/classes/org/apache/jsp"/>
  </delete>
 </target>
</project>

إذا كان لديك بالفعل JSP تجميع العمل فقط تريد دمج web.xml ملفات بسيطة XSLT يمكن أن تكون مكتوبة إلى إضافة العناصر المحددة(مثل بريمج تعيينات) من ولدت حديثا ويب xml في المستند الأصلي.

نصائح أخرى

Doh - هناك خيار في jasper2 مهمة لصناعة السيارات في دمج جزء في الرئيسية web.xml - addWebXmlMappings

    <jasper2
         validateXml="false"
         uriroot="${web.dir}"
         addWebXmlMappings="true"
         webXmlFragment="${web.dir}/WEB-INF/classes/jasper_generated_web.xml"
         outputDir="${web.dir}/WEB-INF/jsp-src" />

أتساءل كيف جيدة الدمج...

مزعج تحتاج إلى توليد جزء لا تزال ، على الرغم من عدم الحاجة إليها بعد هذه المهمة.

لأن إنشاء جزء غير صالح ملف XML ( انها جزء بعد كل شيء ) ، فإنه ليس من الممكن استخدام XSLT مباشرة.من ناحية أخرى لم يكن لديك إلى.هنا هو خدعة بسيطة من شأنها أن تعطيك بالضبط ما تحتاجه.

في web.xml ملف إدراج XML التعليق <!-- @JSPS_MAP@ --> بين <servlet> و <servlet-mapping> عناصر مثل

  <servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>my.servlets.MyServlet</servlet-class>
  <servlet>

  <!-- @JSPS_MAP@ -->

  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/my-servlet</url-pattern>
  </servlet-mapping>

ثم استخدام رمز تصفية محل @JSPS_MAP@ الوسم مع المحتوى.

<loadfile
  property="generated.web.xml.fragment"
  srcFile="${generated.fragment.file}"
/>

<copy file="${orig-web-content.dir}/WEB-INF/web.xml"
  toFile="${generated-web-content.dir}/WEB-INF/web.xml"
>
  <filterset>
    <filter token="JSPS_MAP"
      value=" --&gt; ${generated.web.xml.fragment} &lt;!-- "
    />
  </filterset>
</copy>

هذا النهج لديه ميزة أن الأصل web.xml الملف غير صالحة تماما (علامة مخفية في التعليق) ، ولكن يمنحك السيطرة الكاملة على متى وأين ولدت جزء سيتم إدراج.

حتى DEV build, مجرد نسخ ${orig-web-content.dir}/WEB-INF/web.xml إلى ${generated-web-content.dir}/WEB-INF/web.xml دون تصفية.

هناك jasper2 النمل مهمة أشار آخرون.ظننت أنني كنت أذكر بضعة خيارات أخرى وجدت.

واحد هو الصبار' webxmlmerge النمل المهمة التي يستخدم org.codehaus.البضائع.وحدة نمطية.webapp.WebXmlMerger

آخر استخدام JAXB التلاعب web.xml;سيباستيان ديون هو dtd-مخططات-مولد demo لا هذا.غير متأكد ما الترخيص على الرغم من.

fwiw وقد نظرت هذه الخيارات أعتقد أنني ذاهب إلى استخدام النمل XSLT المهمة.

في web.xml الملف إذا كان لديك علامات لتحديد مكان دمج يبدأ وينتهي addWebXmlMappings العلم سوف تولد الملف بشكل صحيح بالنسبة لك.العلامات هي:<!-- JSPC servlet mappings start --> و <!-- JSPC servlet mappings end --> بعد فعل هذا web.xml كل شيء يعمل مثل السحر!(يجب أن ننظر إلى رمز org.apcahe.جاسبر.JspC أن نرى كيف تم تنفيذ هذا)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top