Я пишу проект для приемочного тестирования, и по разным причинам он зависит от другого проекта, который упакован как WAR. Мне удалось распаковать WAR с помощью maven-dependency-plugin, но я не могу заставить мой проект включить распакованное WEB-INF/lib/*.jar
и WEB-INF/classes/*
включить его в путь к классам, поэтому сборка не удалась. Есть ли способ включить эти файлы в путь к классам или есть лучший способ зависеть от WAR?
Большое спасибо.
maven
maven-2
war
maven-dependency-plugin
deelo55
источник
источник
Действительно, по замыслу Maven не разрешает транзитивные зависимости войны, объявленной как зависимость проекта. На самом деле есть проблема с этим, MNG-1991 , но она не будет решена в Maven 2.x, и
я не уверен, чтоне знаю, позволяют ли наложения решить эту проблему. Насколько я понимаю, предлагаемое решение заключается в дублировании зависимостей, например, в проекте типа pom.(РЕДАКТИРОВАТЬ: немного покопавшись, я нашел кое-что интересное в этой теме, которую цитирую ниже:
Итак, у меня нет опыта с этим, но плагин maven warpath на самом деле выглядит красиво и просто и доступен в центральном репо. Чтобы использовать его, включите в свой
pom.xml
файл следующий элемент конфигурации плагина :[...] <build> <plugins> <plugin> <groupId>org.appfuse</groupId> <artifactId>maven-warpath-plugin</artifactId> <version>1.0-SNAPSHOT</version> <extensions>true</extensions> <executions> <execution> <goals> <goal>add-classes</goal> </goals> </execution> </executions> </plugin> </plugins> </build> [...]
И добавьте военные зависимости, которые вы хотите включить в путь к классам, как зависимости типа warpath:
[...] <dependencies> <dependency> <groupId>org.appfuse</groupId> <artifactId>appfuse-web</artifactId> <version>2.0</version> <type>war</type> </dependency> <dependency> <groupId>org.appfuse</groupId> <artifactId>appfuse-web</artifactId> <version>2.0</version> <type>warpath</type> </dependency> </dependencies> [...]
Необходимы типы зависимостей как war, так и warpath: тип war используется подключаемым модулем Maven war для наложения war, тип warpath используется подключаемым модулем Warpath для определения правильного списка артефактов для включения в путь к классам проекта.
Я бы попробовал.)
источник
Используйте оверлеи . Во-первых, ваш тестовый проект должен иметь упаковку.
war
.Объявите зависимость военного проекта, который хотите протестировать:
<dependency> <groupId>${project.groupId}</groupId> <artifactId>your-project-arftifactId</artifactId> <version>${project.version}</version> <type>war</type> <scope>test</scope> </dependency>
затем настройте наложение maven-war-plugin:
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <webResources> <resource> <directory>${basedir}/src/main/webresources</directory> <filtering>true</filtering> </resource> </webResources> <overlays> <overlay/> <overlay> <groupId>your.group</groupId> <artifactId>your-project-artifactId</artifactId> </overlay> </overlays> </configuration> </plugin>
В приведенном выше примере в тестовом проекте я перезаписываю файлы конфигурации веб-ресурсов (например, контекст и т. Д.).
РЕДАКТИРОВАТЬ: это решение не тестировалось с Maven 3.
источник
Хорошее замечание, Джастин. Это помогло мне решить мою проблему, а именно: включить войну в сборку И включая все ее транзитивные зависимости. Я не мог дублировать зависимость от войны как 'jar', как вы предложили, поскольку плагин сборки не найдет банку, на которую ссылается этот groupId / artefactId, но
работает! Война и ее переходные зависимости в сборку не входят. Чтобы исключить (теперь также появляющийся) файл pom, мне пришлось добавить такой элемент exclude:
<excludes> <exclude>*:pom</exclude> </excludes>
в мой файл assembly.xml.
Я думаю, что это также может быть обходным путем для исходного вопроса этой ветки.
источник
Если вы укажете зависимость от военного проекта как зависимость от jar-файлов, кажется, что они собирают необходимые jar-файлы / ресурсы. Я использую Maven 2.2 + m2eclipse.
источник