У меня есть проект веб-приложения Maven. Он имеет структуру каталогов по умолчанию, как показано ниже -
|-- pom.xml
`-- src
`-- main
|-- java
| `-- com
| `-- example
| `-- projects
| `-- SampleAction.java
|-- resources
| `-- images
| `-- sampleimage.jpg
`-- webapp
|-- WEB-INF
| `-- web.xml
|-- index.jsp
`-- jsp
`-- websource.jsp
Генерируемый им файл WAR имеет следующую структуру, которая снова основана на значениях по умолчанию -
|-- META-INF
| |-- MANIFEST.MF
| `-- maven
| `-- com.example.projects
| `-- documentedproject
| |-- pom.properties
| `-- pom.xml
|-- WEB-INF
| |-- classes
| | |-- com
| | | `-- example
| | | `-- projects
| | | `-- SampleAction.class
| | `-- images
| | `-- sampleimage.jpg
| `-- web.xml
|-- index.jsp
`-- jsp
`-- websource.jsp
Я хочу переименовать web-prod.xml в web.xml, который находится в каталоге webapp, перед упаковкой в WAR. Теперь загвоздка в том, что содержимое этого каталога копируется в target/<finalName>
maven-war-plugin
только на этапе упаковки, и сразу же создается WAR.
Поскольку содержимое webapp копируется по умолчанию maven-war-plugin
, другие плагины как maven-compiler-plugin
и maven-resources-plugin
, которые появляются раньше, не имеют никакого отношения к изменению указанного файла.
pom.xml
<build>
...
<plugins>
...
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>replace-descriptor</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<delete file="${project.build.directory}/${project.finalName}/WEB-INF/web.xml" />
<move file="${project.build.directory}/${project.finalName}/WEB-INF/web-prod.xml" tofile="${project.build.directory}/${project.finalName}/WEB-INF/web.xml"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archiveClasses>true</archiveClasses>
<attachClasses>true</attachClasses>
<warSourceIncludes>WEB-INF/**</warSourceIncludes>
<packagingExcludes>WEB-INF/classes</packagingExcludes>
<webResources>
<resource>
<directory>src/main/resources</directory>
<targetPath>WEB-INF/classes</targetPath>
<includes>
...
</includes>
</resource>
<resource>
<directory>${project.build.directory}/classes</directory>
<includes>
...
</includes>
<targetPath>WEB-INF/classes</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" metadata-complete="true" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>NSWeb</display-name>
...
<filter>
<filter-name>corsFilter</filter-name>
<filter-class>com.example.core.security.filter.CORSFilter</filter-class>
</filter>
...
</web-app>
web-prod.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" metadata-complete="true" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>NSWeb</display-name>
...
<filter>
<filter-name>corsFilter</filter-name>
<filter-class>com.example.core.security.filter.CORSFilter</filter-class>
<init-param>
<description>A comma separated list of allowed origins. Note: An '*' cannot be used for an allowed origin when using credentials.</description>
<param-name>cors.enabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
...
</init-param>
<init-param>
...
</init-param>
<init-param>
...
</init-param>
...
</filter>
...
</web-app>
web-prod.xml
вweb.xml
? - person khmarbaise   schedule 14.07.2021web-prod.xml
предназначен для производственного развертывания. Следовательно, я хочу, чтобы это было доступно как настоящаяweb.xml
перед военная упаковка. - person Sid   schedule 14.07.2021maven-cargo-plugin
вместе сCargo Daemon
, который автоматически загружает и запускает сервер Tomcat, а также развертывает на нем артефакт. Таким образом, мы не можем вручную настроить Tomcat для использованияweb.xml
извне. - person Sid   schedule 14.07.2021web-prod.xml
в исходном коде вашего примера. Это могло бы помочь, если бы вы указали значения в вопросе, чтобы фактически воспроизвести проблему (например, у вас есть и web.xml, и web-prod.xml, или что-то еще) - person eis   schedule 15.07.2021maven-cargo-plugin
функция слияния web.xml и функцияmaven-war-plugin
наложения предназначены для слияния двух файлов WAR. Не думаю, что они подходят под мой случай. Я не стал использовать функцию фильтрации, так как есть 40 лишних строк, которые мне придется заменить через заполнитель. Я все равно могу попробовать сейчас. - person Sid   schedule 15.07.2021