Maven в многомодульном веб-проекте: как поместить выходные модули родственных модулей в WEB-INF/классы, а не в WEB-INF/lib в виде JAR?

У меня есть многомодульный проект Maven. По умолчанию, когда я создаю веб-модуль, все родственные модули типа JAR, от которых он зависит, копируются в папку WEB-INF/lib. Я хочу, чтобы вывод родственных модулей помещался в папку WEB-INF/classes без упаковки в JAR.

Более общий вопрос может заключаться в следующем: как сохранить файлы конфигурации одноуровневых модулей вне JAR-файлов, чтобы их можно было легко редактировать после развертывания?


person Igor Romanov    schedule 11.03.2009    source источник


Ответы (2)


Вы можете использовать оверлей, хотя для этого требуется, чтобы родственный иметь тип war, а не jar. Там также используется плагин зависимостей для распаковки jar, но он распаковывает только версию в вашем локальном репозитории, а не ту, которую вы только что упаковали.

Что касается вашего «более общего» вопроса, есть исключает тег для плагина jar.

person sblundy    schedule 11.03.2009

В случае, если кому-то интересно, я нашел это решение. У меня была точно такая же проблема.

            <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <packagingExcludes>WEB-INF/lib/MYPACKAGE_TO_EXCLUDE.jar</packagingExcludes>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>unpack-MYPACKAGE_TO_EXCLUDE</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>unpack</goal>
                            </goals>
                            <configuration>
                                <artifactItems>
                                    <artifactItem>
                                        <groupId>${project.groupId}</groupId>
                                        <artifactId>MYPACKAGE_TO_EXCLUDE</artifactId>
                                        <version>${project.version}</version>
                                        <type>jar</type>
                                        <outputDirectory>${project.build.directory}/classes
                                </outputDirectory>
                                    </artifactItem>
                                </artifactItems>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
person Balázs Németh    schedule 13.07.2011
comment
Вот как бы я это сделал, но помните, что сказал другой парень: он распаковывает только версию в вашем локальном репозитории, а не ту, которую вы только что запаковали. - person Sean Patrick Floyd; 13.07.2011
comment
@ Шон Патрик Флойд, да, но если я сделаю полную перестройку, в родительском, возможно, с установкой mvn, MYPACKAGE сначала будет собран и скопирован в локальное репо, а затем начнется сборка этого проекта. или вы говорите, что сборка второго проекта предшествует загрузке MYPACKAGE в репо? - person Balázs Németh; 13.07.2011
comment
Вы, сэр, мой герой. Спасибо, что нашли время опубликовать свое решение. - person Uncle Iroh; 08.04.2015