Как объединиться, jsp предварительно скомпилировал фрагмент web.xml с основным web.xml с помощью Муравья

Вы ищете merge()

color1 <- c("red", "blue", "yellow", "orange", "green", "brown")
assignment <- c(1,2,3,4,9,13)
color_df <- as.data.frame(color1)
color_df$assignment <- assignment

sport1 <- c("basketball", "hockey", "baseball", "soccer", "tennis", "football", "volleyball")
assignment <- c(4,3,6,1,5,7,2)
sport_df <- as.data.frame(sport1)
sport_df$assignment <- assignment

merge(color_df, sport_df, by = "assignment")
#>   assignment color1     sport1
#> 1          1    red     soccer
#> 2          2   blue volleyball
#> 3          3 yellow     hockey
#> 4          4 orange basketball

Создано в 2019-01-19 с помощью пакета представитель (v0.2.1) sup> [ 114]

5
задан Swati 2 October 2008 в 13:02
поделиться

5 ответов

Я использую задачи Ant яшмы Tomcat в своем проекте, которые предварительно компилируют JSPs в сервлеты и добавляют новые отображения сервлета к исходному web.xml. В сборках DEV просто пропустите этот шаг и разверните JSPs без предварительной компиляции и модификации 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 в оригинал.

4
ответ дан 18 December 2019 в 13:21
поделиться

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" />

Интересно, насколько хороший слияние...

Раздражающе необходимо генерировать фрагмент все еще, даже при том, что ее не нужное после этой задачи.

4
ответ дан 18 December 2019 в 13:21
поделиться

Поскольку сгенерированный фрагмент не является допустимым файлом XML (в конце концов, это фрагмент), напрямую использовать XSLT невозможно. С другой стороны, это не обязательно. Вот простой прием, который даст вам именно то, что вам нужно.

В файл web.xml вставьте XML-комментарий между и элементы, например

  <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 просто скопируйте $ {orig-web-content.dir} /WEB-INF/web.xml в $ {generated-web-content.dir} /WEB-INF/web.xml без фильтрации.

4
ответ дан 18 December 2019 в 13:21
поделиться

Есть задача jasper2 муравья, отмеченная другими. Я подумал, что упомянул бы еще пару вариантов, которые я нашел.

Один из них - задача cactus webxmlmerge ant, которая использует org.codehaus.cargo.module.webapp.WebXmlMerger

Другой было бы использовать JAXB для управления файлом web.xml; Это делает демонстрация dtd-schemas-generator Себастьяна Дионна. Не уверен, что это за лицензия.

fwiw рассмотрев эти варианты, я думаю, что собираюсь использовать задачу ant XSLT .

1
ответ дан 18 December 2019 в 13:21
поделиться

В вашем файле web.xml, если у вас есть теги, чтобы указать, где начинается и заканчивается слияние, флаг addWebXmlMappings сгенерирует файл правильно для вас. Теги: а также после этого с моим web.xml все заработало как шарм! (Мне нужно посмотреть код org.apcahe.jasper.JspC, чтобы увидеть, как это было реализовано)

1
ответ дан 18 December 2019 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: