JAR будет пустым — контент не был отмечен для включения

У меня Maven 3.3.9 установлен как отдельный .deb на Debian 8.4
Я занимаюсь разработкой php-кода и имею предопределенное дерево файлов разработки, которое не может позволить мне следовать очень строгим соглашениям Maven.
У меня есть две директории проекта с одинаковой структурой:

.
├── admin5.php
.
├── app
│   ├── addons
.   .
│   └── Tygh
├── bower_components
│   └── jquery-sticky
├── bower.json
.   .
├── js
│   ├── addons
│   ├── lib
│   └── tygh
├── pom.xml
├── target
│   ├── classes
│   ├── dependency-maven-plugin-markers
│   ├── ip5_bestore-1.0.jar
│   ├── maven-archiver
│   └── original-ip5_bestore-1.0.jar
└── var

У меня есть один и тот же pom.xml в обоих:

<project  xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ru.ip-5</groupId>
<artifactId>ip5_coolposter</artifactId>
<version>1.0</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
</execution>
</executions>
<configuration>
<outputDirectory>  {basedir}/src/main/js/addons/ip5_bestore/dependencies/</outputDirectory>
<resources>
<resource>
<directory>  {basedir}/bower_components/fabric.js/dist/</directory>
<includes>
<include>fabric.min.js</include>
</includes>
</resource>
</resources>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>  {basedir}</directory>
<includes>
<include>app/addons/ip5_*/</include>
<include>design/backend/css/addons/ip5_*/</include>
<include>design/backend/media/images/ip5_*/</include>
<include>design/backend/templates/addons/ip5_*/</include>
<include>design/themes/responsive/css/addons/ip5_*/</include>
<include>design/themes/responsive/media/images/addons/ip5_*/</include>
<include>design/themes/responsive/media/fonts/ip5_fonts/</include>
<include>design/themes/responsive/styles/data/IP5_*</include>
<include>design/themes/responsive/templates/addons/ip5_*/</include>
<include>js/addons/ip5_*/</include>
<include>var/langs/*/addons/ip5_*.po</include>
<include>cmsmagazined1992e543a5d7b4d64afe783fffdbc8d.txt</include>
</includes>
</resource>
</resources>
</build>
</project>

Когда я делаю «mvn package» на одном из них, все получается, но на другом я получаю:

[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ ip5_bestore ---
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO]
[INFO] --- maven-shade-plugin:2.4.1:shade (default) @ ip5_bestore ---
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing /var/www/bestore/target/ip5_bestore-1.0.jar with /var/www/bestore/target/ip5_bestore-1.0-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

2

Решение

Maven-зависимость-плагин unpack цель с идентификатором выполнения «копия» связана с package фаза жизненного цикла. Maven-ресурсы-плагин copy-resources цель с тем же идентификатором выполнения связана с validate фаза.

validate фаза наступает раньше package, так что копия происходит до распаковки ресурсов. Таким образом, нечего копировать и нечего упаковывать. Измените фазу выполнения «копирования» на validateи тогда это должно работать. Оба исполнения плагина будут привязаны к одной и той же фазе, поэтому первое, что указано в POM, запускается первым. Если вы хотите, чтобы порядок был кристально чистым, независимо от порядка подключаемых модулей в POM, то также измените выполнение «copy-resources», чтобы оно выполнялось с phase initialize,

Я предполагаю, что он, кажется, «работает» с первым проектом, потому что зависимости уже распакованы где-то по пути. Если вы изменили команду на mvn clean package Я подозреваю, что оба проекта не будут иметь ничего общего.

Вы можете найти Ссылка на жизненный цикл Maven полезно.

2

Другие решения

ОК, это было:
Раздел конфигурации плагина copy-resources должен находиться в разделе исполнения:

<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/js/addons/ip5_bestore/dependencies/</outputDirectory>
<resources>
<resource>
<directory>bower_components/jquery-sticky/</directory>
<includes>
<include>jquery.sticky.js</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
0

По вопросам рекламы [email protected]