Apache Maven Shade Plugin – Resource Transformers (2023)

Resurssimuuntajat

Luokkien/resurssien yhdistäminen useista artefakteista yhdeksi uber-JAR:ksi on helppoa, kunhan päällekkäisyyttä ei ole. Muutoin tarvitaan jonkinlainen logiikka resurssien yhdistämiseksi useista JAR:eista. Tässä resurssimuuntajat käynnistyvät.

Muuntajat sisäänorg.apache.maven.plugins.shade.resource
ApacheLicenseResourceTransformerEstää lisenssien päällekkäisyyden
ApacheNoticeResourceTransformerValmistelee yhdistettyä HUOMAUTUS
Lisätään TransformerLisää sisältöä resurssiin
ComponentsXmlResourceTransformerAggregaatit Plexuskomponentit.xml
DontIncludeResourceTransformerEstää vastaavien resurssien sisällyttämisen
GroovyResourceTransformerYhdistää Apache Groovy laajentaa moduuleja
SisällytäResourceTransformerLisää tiedostoja projektista
ManifestResourceTransformerAsettaa merkinnätSELVÄ
PluginXmlResourceTransformerKiviainekset Mavensplugin.xml
ResourceBundleAppendingTransformerYhdistää resurssipaketit
PalvelutResourceTransformerLuokkien nimet on siirrettyMETA-INF/palvelutresurssit ja yhdistää ne.
XmlAppendingTransformerLisää XML-sisältöä XML-resurssiin
Muuntajat sisäänorg.apache.maven.plugins.shade.resource.properties(saatavilla 3.2.2 alkaen)
PropertiesTransformerYhdistää ominaisuustiedostot, jotka omistavat järjestyksen konfliktien ratkaisemiseksi
OpenWebBeansPropertiesTransformerYhdistää Apache OpenWebBeans -määritystiedostot
MicroprofileConfigTransformerYhdistää ristiriitaiset Microprofile Config -ominaisuudet järjestysluvun perusteella

Plexus-komponenttien kuvaajien yhdistäminenComponentsXmlResourceTransformer

Plexus IoC -säiliöön kohdistettujen komponenttien JAR-tiedostot sisältävät aMETA-INF/plexus/components.xmlmerkintä, joka ilmoittaa komponentin ja sen vaatimukset. Jos uber JAR yhdistää useita Plexus-komponentteja, aComponentsXmlResourceTransformertäytyy käyttää yhdistämään XML-kuvaajat:

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    shade     < /transformers>       ...

Plugin versiosta 1.3 lähtien tämä resurssimuuntaja päivittää myös kuvaajan huomioimaan komponenttien liitäntöjen/toteutusten (jos sellaisia ​​on) uudelleensijoittamisen.

Siirrä Maven Plugin Descriptorin luokatPluginXmlResourceTransformer

KanssaPlugin Tools 3.0huomautuksia on otettu käyttöön. Nyt viittaukset luokkiin eivät ole enää luokan nimiä merkkijonona, vaan varsinainen luokkaviittaus. Kun halusit siirtää luokkia, sinun oli säilytettäväMETA-INF/maven/plugin.xmlkäsin, mutta nyt tämä voidaan tehdäPluginXmlResourceTransformer

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    shade     < /transformers>       ...

Palvelumerkintöjen ketjuttaminenPalvelutResourceTransformer

Joidenkin rajapintojen toteutuksia tarjoavat JAR-tiedostot toimitetaan usein aMETA-INF/palvelut/hakemisto, joka kartoittaa rajapinnat niiden toteutusluokkiin palvelun paikantimen hakemista varten. Jos haluat siirtää näiden toteutusluokkien luokkanimiä ja yhdistää useita saman käyttöliittymän toteutuksia yhdeksi palvelumerkinnäksi,PalvelutResourceTransformervoidaan käyttää:

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    shade     < /transformers>       ...

Tiettyjen tiedostojen sisällön yhdistäminen kanssaLisätään Transformer, XmlAppendingTransformer ja ResourceBundleAppendingTransformer

Jotkut purkit sisältävät lisäresursseja (kuten ominaisuustiedostoja), joilla on sama tiedostonimi. Voit välttää päällekirjoituksen yhdistämällä ne liittämällä niiden sisällön yhdeksi tiedostoksi. Yksi hyvä esimerkki tästä on yhdistämällä sekä jousikonteksti että plexus-jousipurkit. Molemmilla onMETA-INF/jousikäsittelijättiedosto, jota Spring käyttää XML-skeeman nimiavaruuksien käsittelemiseen. Voit yhdistää kaikkien tiedostojen sisällön samalla nimellä käyttämälläLisätään Transformerkuten alla:

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    shade     META-INF/spring.handlers   META-INF/spring.schemas         ...

XML-tiedostoille voit käyttääXmlAppendingTransformersen sijaan:

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    varjostin     META-INF/magic.xml          ...

Laajennuksen versiosta 1.3.1 lähtienXmlAppendingTransformerei oletusarvoisesti lataa DTD:itä, jolloin vältetään pääsy verkkoon. Tämän tilan mahdollinen haittapuoli on se, että ulkoisia entiteettejä ei voida ratkaista, jotka voivat epäonnistua muunnoksessa, esim. käytettäessä Crimson XML -jäsennintä, jota käytetään joissakin JRE 1.4 -versioissa. Jos muunnettu resurssi käyttää ulkoisia entiteettejä, DTD-resoluutio voidaan joko ottaa takaisin käyttöön tai liitännäisriippuvuusxerces:xercesImpl:2.9.1lisätään POM:iin.

ResourceBundles-ominaisuustiedostoissa voit käyttääResourceBundleAppendingTransformersen sijaan, mikä kunnioittaa myös kaikkia saatavilla olevia alueita:

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    shade     <! -- resurssipaketin perusnimi, täydellinen luokan nimi --> polku/viestit         ...

Pois lukien resurssitDontIncludeResourceTransformer

TheDontIncludeResourceTransformermahdollistaa resurssien poissulkemisen, kun niiden nimi päättyy tiettyyn arvoon.

Esimerkiksi seuraava esimerkki sulkee pois kaikki numeroihin päättyvät resurssit.txt.

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    shade     .txt         ...

Koska maven-shade-plugin-3.0 on myös mahdollista antaa luettelo resursseista, joita ei pitäisi sisällyttää, kuten:

  .txt READ.me 

Uusien resurssien lisääminenSisällytäResourceTransformer

TheSisällytäResourceTransformermahdollistaa projektitiedostojen sisällyttämisen pakettiin tietyllä nimellä.

Esimerkiksi seuraava esimerkki sisältääREADME.txtpakkauksessa kutenREADMEinMETA-INFhakemistosta.

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    shade     META-INF/README README.txt         build> ...

Luettelomerkintöjen asettaminenManifestResourceTransformer

TheManifestResourceTransformersallii olemassa olevat merkinnätSELVÄkorvattava ja lisättävä uusia merkintöjä.

Esimerkiksi seuraavat näytesarjat

  • thePääluokkamerkinnän arvoonapp.main.classomaisuutta,
  • theX-Compile-Source-JDKmerkinnän arvoonmaven.compile.sourceomaisuutta ja
  • theX-Compile-Target-JDKmerkinnän arvoonmaven.compile.targetomaisuutta.

OletuksenaManifestResourceTransformersiirtää seuraavat määritteet:

  • Vienti-paketti
  • Tuonti-paketti
  • Tarjoa-ominaisuus
  • Vaativa-kyky

Kanssalisäattribuutitvoit määrittää myös määritteet, jotka on siirrettävä.

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    shade      ${app.main.class} ${maven.compile.source} ${maven.compile.target}        plugin>   ...

Lisensointi

Lisenssien päällekkäisyyden estäminenApacheLicenseResourceTransformer

Jotkut avoimen lähdekoodin tuottajat (mukaan lukienApache Software Foundation) sisällyttää kopion lisenssistään META-INF-hakemistoon. Nämä ovat joko perinteisesti nimettyKÄYTTÖOIKEUS,LISENSSI.txttaiLICENSE.md. Kun yhdistät näitä riippuvuuksia, näiden resurssien lisääminen voi aiheuttaa sekaannusta. TheApacheLicenseResourceTransformervarmistaa, että päällekkäisiä lisenssejä (nimetty tämän sopimuksen mukaan) ei yhdistetä.

Esimerkiksi seuraava estää lisenssin ayhteiset kokoelmatriippuvuus yhdistetään

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    shade      muuntaja>        ...

Ilmoitusten yhdistäminenApacheNoticeResourceTransformer

Jotkut lisenssit (mukaan lukienApache-lisenssi, versio 2) edellyttävät, että jatkojakelijat säilyttävät ilmoitukset.ApacheNoticeResourceTransformerautomatisoi sopivan kokoonpanonILMOITUS.

Esimerkiksi yksinkertaisesti yhdistäminen riippuvaisiin ilmoituksiin:

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    sävy     false         ...

Apache Groovy -laajennusmoduulien kuvaajien yhdistäminenGroovyResourceTransformer

Apache Groovy -kieli tarjoaa laajennusmoduuleja, jotka sijaitsevat osoitteessaMETA-INF/services/org.codehaus.groovy.runtime.ExtensionModule, nämä moduulit käyttävät ominaisuustiedostomuotoa.GroovyResourceTransformerautomatisoi Groovy-laajennusmoduulien kokoonpanonILMOITUS.

Esimerkiksi useiden purkkien laajennusmoduulien yhdistäminen:

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    sävy     the-aggregated-module 1.0.0         build> ...

Ominaisuustiedostojen yhdistäminenPropertiesTransformer

ThePropertiesTransformermahdollistaa joukon ominaisuustiedostojen yhdistämisen ja ristiriitojen ratkaisemisen kunkin tiedoston tärkeysjärjestyksen perusteella. Valinnainenjo MergedKeymahdollistaa loogisen lipun olevan tiedostossa, joka, jos se on tosi, pyytää käyttämään tiedostoa sellaisenaan yhdistämisen tuloksena. Jos kahta tiedostoa pidetään valmiina yhdistämisprosessissa, varjostus epäonnistuu.

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    shade      määritys/sovellus.ominaisuudet kertaluku  jo_yhdistetty 0  false         ...

Apache OpenWebBeans -määrityksen yhdistäminenOpenWebBeansPropertiesTransformer

OpenWebBeansPropertiesTransformeresikonfiguroi aPropertiesTransformerApache OpenWebBeans -määritystiedostoille.

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    shade            ...

Microprofile Config -ominaisuuksien yhdistäminen kanssaMicroprofileConfigTransformer

MicroprofileConfigTransformeresikonfiguroi aPropertiesTransformervarten Microprofile Config. Ainoa vaadittu konfiguraatio on järjestysluku. Thejo MergedKeyon tuettu, mutta sitä ei ole määritelty spesifikaatiossa.

 ...    org.apache.maven.plugins maven-shade-plugin 3.4.1    shade     configuration/app.properties         ...

FAQs

What is Apache Maven shade plugin? ›

This plugin provides the capability to package the artifact in an uber-jar, including its dependencies and to shade - i.e. rename - the packages of some of the dependencies.

When to use Maven shade plugin? ›

maven-shade-plugin : It packages all dependencies into one uber-jar. It can also be used to build an executable jar by specifying the main class. This plugin is particularly useful as it merges content of specific files instead of overwriting them by Relocating Classes.

How does the Maven shade plugin work? ›

The maven shade plugin is a versatile plugin that is used for packaging the artifacts in uber-jar, including all of its dependencies. It also provides the feature to rename the packages of some of its dependencies. We can create a single independent jar file containing everything necessary to run the project.

What is ManifestResourceTransformer? ›

Class ManifestResourceTransformer

A resource processor that allows the arbitrary addition of attributes to the first MANIFEST. MF that is found in the set of JARs being processed, or to a newly created manifest for the shaded JAR.

Why Apache Maven is used? ›

Maven is chiefly used for Java-based projects, helping to download dependencies, which refers to the libraries or JAR files. The tool helps get the right JAR files for each project as there may be different versions of separate packages.

What is the purpose of Apache Maven? ›

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

What is the difference between Maven and Maven plugin? ›

"Maven" is really just a core framework for a collection of Maven Plugins. In other words, plugins are where much of the real action is performed, plugins are used to: create jar files, create war files, compile code, unit test code, create project documentation, and on and on.

What is the difference between Maven dependency plugin and Maven resources plugin? ›

A plugin is an extension to Maven, something used to produce your artifact (maven-jar-plugin for an example, is used to, you guess it, make a jar out of your compiled classes and resources). A dependency is a library that is needed by the application you are building, at compile and/or test and/or runtime time.

What is the purpose of the Maven assembly plugin? ›

The Assembly Plugin for Maven enables developers to combine project output into a single distributable archive that also contains dependencies, modules, site documentation, and other files. Your project can easily build distribution "assemblies" using one of the prefabricated assembly descriptors.

Where do Maven plugins go? ›

In Maven, there are two kinds of plugins, build and reporting:
  • Build plugins are executed during the build and configured in the <build/> element.
  • Reporting plugins are executed during the site generation and configured in the <reporting/> element.

How to run Maven plugin in Java? ›

Exec Maven Plugin - Running Java Programs from Maven Build
  1. Step 1: Adding exec-maven-plugin Configurations to pom. xml. If you want to use any maven plugin, you need to configure it in the pom. ...
  2. Step 2: Running the maven build with exec:java goal. Here is the output when we run the maven build with the exec:java goal.
Aug 3, 2022

How to create a fat jar in Maven? ›

Creating fat JARs using the Maven Assembly plugin
  1. Go to the pom.xml file and make sure the main application class is specified: <properties> <main.class>com.example.ApplicationKt</main.class> </properties> ...
  2. Add maven-assembly-plugin to the plugins block as follows:
Jan 10, 2023

How do you shade a jar? ›

Step-by-step shading with Gradle
  1. Add the plugin. First we need to add the plugin we will be using. ...
  2. Configure the top-level dependency we want to shade. Add a dependency on the jar you wish to shade. ...
  3. Configure any transitive dependencies we don't want to shade. ...
  4. Set up the packages we want to relocate. ...
  5. Publish our shaded jar.
May 30, 2020

What version is Maven shade plugin? ›

Apache Maven Shade Plugin
Version
3.5.xJun 16, 2023
3.4.xOct 27, 2022
3.4.0
3.3.xMar 29, 2022
34 more rows

What is ServicesResourceTransformer? ›

ServicesResourceTransformer. Relocated class names in META-INF/services resources and merges them. XmlAppendingTransformer. Adds XML content to an XML resource. Transformers in org.apache.maven.plugins.shade.resource.properties (available since 3.2.2)

What is the use of JaCoCo Maven plugin? ›

The JaCoCo Maven plug-in provides the JaCoCo runtime agent to your tests and allows basic report creation. If you want to have line number information included in the coverage reports or you want source code highlighting the class files of the test target must be compiled with debug information.

What is Maven compiler plugin used for? ›

The compiler plugin is used to compile the source code of a Maven project. This plugin has two goals, which are already bound to specific phases of the default lifecycle: compile – compile main source files. testCompile – compile test source files.

What does Docker Maven plugin do? ›

The docker Maven plugin allows us to manage all the docker images and pom. xml containers. The pom. xml file of a maven-based project holds all the dependencies, repositories, etc., needed to build and run such a project.

References

Top Articles
Latest Posts
Article information

Author: Jamar Nader

Last Updated: 09/05/2023

Views: 5855

Rating: 4.4 / 5 (75 voted)

Reviews: 90% of readers found this page helpful

Author information

Name: Jamar Nader

Birthday: 1995-02-28

Address: Apt. 536 6162 Reichel Greens, Port Zackaryside, CT 22682-9804

Phone: +9958384818317

Job: IT Representative

Hobby: Scrapbooking, Hiking, Hunting, Kite flying, Blacksmithing, Video gaming, Foraging

Introduction: My name is Jamar Nader, I am a fine, shiny, colorful, bright, nice, perfect, curious person who loves writing and wants to share my knowledge and understanding with you.