2.1 maven-resources-plugin erőforrások másolása beépülő modul
Ha webalkalmazást épít, akkor csak egy csomó különféle erőforrás lesz benne. Ezek jar könyvtárak, jsp szervletek, beállítási fájlok. És természetesen ez egy csomó statikus fájl, például html
, css
, js
, valamint különféle képek.
Alapértelmezés szerint egy projekt felépítésekor a Maven egyszerűen átmásolja az összes fájlt a mappából src/main/resources
a célkönyvtárba. Ha módosítani szeretné ezt a viselkedést, akkor a beépülő modul segíteni fog maven-resources-plugin
.
Mintakód egy ilyen bővítményhez:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
${basedir}/target/resources
</outputDirectory>
<resources>
<resource> instructions for copying a resource 1 </resource>
<resource> instructions for copying a resource 2 </resource>
<resource> instructions for copying a resource N </resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Ez a beépülő modul az érvényesítési fázisban kerül meghívásra. A címke segítségével <outputDirectory>
beállíthatja azt a könyvtárat, ahová a beépülő modul másolja a -ban megadott erőforrásokat <resources>
. És itt tud teljes erejével kibontakozni a plugin.
2.2 Erőforrások szűrése a maven-resources-plugin segítségével
A beépülő modulok erőforrásai nem csak fájlok, hanem azonnal könyvtárak formájában is megadhatók. Ezenkívül egy maszk is hozzáadható a könyvtárhoz, amely meghatározza, hogy mely fájlok kerüljenek bele ebbe az erőforrásba.
Példa:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
</resource>
Két csillag maszkként tetszőleges számú könyvtárat jelöl . A fenti példában a könyvtárban src/main/resources/images
(és annak alkönyvtáraiban) található összes png fájl erőforrásadatként fog működni.
Ha ki szeretne zárni néhány fájlt, használhatja a exclude
. Példa:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
<excludes>
<exclude>old/*.png</exclude>
</excludes>
</resource>
A címkék alkalmazása szekvenciálisan történik: először az include fájlokban megadott include fájlok kerülnek az erőforráshoz, majd a kizárt fájlok kikerülnek ebből a listából.
De ez még nem minden. A beépülő modul bele tud nézni a fájlokba (természetesen ha szövegesek). És például adja hozzá application.properties
az összeállítás szükséges verzióját a fájlhoz. Ahhoz, hogy a bővítmény feldolgozza a fájl tartalmát, meg kell adnia a paramétert <filtering>true</filtering>
.
Példa:
<resource>
<directory>src/main/resources/properties</directory>
<filtering>true</filtering>
<includes>
<include>**/*. properties </include>
</includes>
</resource>
A bővítményről további részletek a következő linken találhatók: https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
2.3 maven-source-plugin forrásbefoglalási bővítmény
Egy másik hasznos bővítmény - maven-source-plugin
lehetővé teszi, hogy a java fájlok forráskódját belefoglalja az összeállításba. Miért?
A helyzet az, hogy a webes alkalmazások mellett nagyon sok könyvtárat állítanak össze a Maven segítségével. Sok Java projekt követi a nyílt forráskód koncepcióját, és a Java közösség számára saját forrásokkal terjesztik.
Miért kell külön plugin? Miért nem tudod bemásolni a forrást és kész?
Először is, minden összetett projektben a források több helyen tárolhatók.
Másodszor, gyakran használják a források xml specifikációkon alapuló generálását, ezeket a forrásokat is bele kell foglalni az összeállításba.
Harmadszor pedig dönthet úgy, hogy nem vesz fel semmilyen különösen titkos fájlt az összeállításba.
Példa a maven-source-plugin beépülő modul használatára:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
2.4 maven-dependency-plugin dependency copy plugin
Előfordulhat, hogy a függőségek (könyvtárak) okosan másolására is szükség van egy projekt felépítése során. Ehhez egy plugint használnak maven-dependency-plugin
.
Példa:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
Ebben a példában a beépülő modul alapértelmezett viselkedése az írás - a könyvtárak másolása a ${project.build.directory}/lib
.
A végrehajtási szakasz kimondja, hogy a beépülő modult az építési fázisban hívják meg - csomag, cél - másolás-függőségek.
Általánosságban elmondható, hogy ennek a bővítménynek meglehetősen nagy céljai vannak, itt vannak a legnépszerűbbek:
1 | függőség: elemezni | függőségi elemzés (használt, nem használt, meghatározott, nem meghatározott) |
2 | dependency:analyze-duplicate | a duplikált függőségek azonosítása |
3 | dependency:resolve | minden függőség feloldása (definíciója). |
4 | dependency:resolve-plugin | az összes plugin engedélye (definíciója). |
5 | függőség:fa | a függőségi fa megjelenítése |
A konfigurációs részben további paramétereket is beállíthat:
1 | kimeneti könyvtár | Könyvtár, ahová a függőségek másolásra kerülnek |
2 | overWriteReleases | Jelölje meg a függőségek felülírásához kiadás létrehozásakor |
3 | overWriteSnapshots | Jelölje meg a SNAPSHOT-tal rendelkező nem terminális függőségek felülírásához |
4 | overWriteIfNewer | Jelölje meg a könyvtárak felülírásához újabb verziókkal |
Példa:
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
Alapértelmezés szerint <overWriteReleases>
, és <overWriteSnapshots>
hamis, mert <overWriteIfNewer>
igaz.
GO TO FULL VERSION