Вы ищете 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]
Я использую задачи 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 в оригинал.
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-комментарий
между
и
элементы, например
<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=" --> ${generated.web.xml.fragment} <!-- "
/>
</filterset>
</copy>
Этот подход имеет то преимущество, что исходный файл web.xml полностью действителен (тег скрыт в комментарии), но дает вам полный контроль над тем, где и когда сгенерированный фрагмент будет вставлен.
Итак, для сборки DEV просто скопируйте $ {orig-web-content.dir} /WEB-INF/web.xml
в $ {generated-web-content.dir} /WEB-INF/web.xml
без фильтрации.
Есть задача jasper2 муравья, отмеченная другими. Я подумал, что упомянул бы еще пару вариантов, которые я нашел.
Один из них - задача cactus webxmlmerge ant, которая использует org.codehaus.cargo.module.webapp.WebXmlMerger
Другой было бы использовать JAXB для управления файлом web.xml; Это делает демонстрация dtd-schemas-generator Себастьяна Дионна. Не уверен, что это за лицензия.
fwiw рассмотрев эти варианты, я думаю, что собираюсь использовать задачу ant XSLT .
В вашем файле web.xml, если у вас есть теги, чтобы указать, где начинается и заканчивается слияние, флаг addWebXmlMappings сгенерирует файл правильно для вас. Теги: а также после этого с моим web.xml все заработало как шарм! (Мне нужно посмотреть код org.apcahe.jasper.JspC, чтобы увидеть, как это было реализовано)