2017-01-06 3 views
0

Dans mon fichier POM.xml, j'ai utilisé le plugin maven-shade et relocalisé la dépendance httpClient. Mais quand j'imprime l'arbre de dépendance en utilisant mvn dependency: tree, je vois toujours la bibliothèque httpClient dans l'arbre comme montré ci-dessous. Pourquoi cela arrive-t-il. Toute aide serait appréciée.Le plugin de nuance Maven se déplace et le bundle ne fonctionne pas

[INFO] +- org.apache.httpcomponents:httpclient:jar:4.3.5:provided 

Mon fichier POM.xml est comme ci-dessous.

<?xml version="1.0" encoding="UTF-8"?> 
<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>com.example</groupId> 
    <version>1.0-SNAPSHOT</version> 
<artifactId>parser</artifactId> 
    <packaging>jar</packaging> 

<!-- change these to the appropriate values --> 
    <name>Parser Apps</name> 
    <description>Applications to showcase different parsers</description> 

    <properties> 
<!-- change this if you desire to use a different version of Apex Core --> 
<apex.version>3.4.0</apex.version> 
    <apex.apppackage.classpath>lib/*.jar</apex.apppackage.classpath> 
    <malhar.version>3.4.0</malhar.version> 
</properties> 

    <build> 
<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-eclipse-plugin</artifactId> 
    <version>2.9</version> 
    <configuration> 
     <downloadSources>true</downloadSources> 
    </configuration> 
    </plugin> 
    <plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.3</version> 
    <configuration> 
     <encoding>UTF-8</encoding> 
     <source>1.7</source> 
     <target>1.7</target> 
     <debug>true</debug> 
     <optimize>false</optimize> 
     <showDeprecation>true</showDeprecation> 
     <showWarnings>true</showWarnings> 
    </configuration> 
    </plugin> 
    <plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.8</version> 
    <executions> 
     <execution> 
     <id>copy-dependencies</id> 
     <phase>prepare-package</phase> 
     <goals> 
      <goal>copy-dependencies</goal> 
     </goals> 
     <configuration> 
      <outputDirectory>target/deps</outputDirectory> 
      <includeScope>runtime</includeScope> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>2.4.3</version> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>shade</goal> 
     </goals> 
     <configuration> 
      <artifactSet> 
      <includes> 
       <include>org.apache.httpcomponents.*</include> 
      </includes> 
      </artifactSet> 
      <relocations> 
      <relocation> 
       <pattern>org.apache.httpcomponents</pattern> 
       <shadedPattern>org.shaded.httpcomponents</shadedPattern> 
      </relocation> 
      </relocations> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
    <plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>app-package-assembly</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     <configuration> 
      <finalName>${project.artifactId}-${project.version}-apexapp</finalName> 
      <appendAssemblyId>false</appendAssemblyId> 
      <descriptors> 
      <descriptor>src/assemble/appPackage.xml</descriptor> 
      </descriptors> 
      <archiverConfig> 
      <defaultDirectoryMode>0755</defaultDirectoryMode> 
      </archiverConfig> 
      <archive> 
      <manifestEntries> 
       <Class-Path>${apex.apppackage.classpath}</Class-Path> 
       <DT-Engine-Version>${apex.version}</DT-Engine-Version> 
       <DT-App-Package-Group-Id>${project.groupId}</DT-App-Package-Group-Id> 
       <DT-App-Package-Name>${project.artifactId}</DT-App-Package-Name> 
       <DT-App-Package-Version>${project.version}</DT-App-Package-Version> 
       <DT-App-Package-Display-Name>${project.name}</DT-App-Package-Display-Name> 
       <DT-App-Package-Description>${project.description}</DT-App-Package-Description> 
      </manifestEntries> 
      </archive> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

    <plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <configuration> 
      <target> 
      <move file="${project.build.directory}/${project.artifactId}-${project.version}-apexapp.jar" 
        tofile="${project.build.directory}/${project.artifactId}-${project.version}.apa" /> 
      </target> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
     <execution> 
     <!-- create resource directory for xml javadoc--> 
     <id>createJavadocDirectory</id> 
     <phase>generate-resources</phase> 
     <configuration> 
      <tasks> 
      <delete dir="${project.build.directory}/generated-resources/xml-javadoc"/> 
      <mkdir dir="${project.build.directory}/generated-resources/xml-javadoc"/> 
      </tasks> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.9.1</version> 
    <executions> 
     <execution> 
     <id>attach-artifacts</id> 
     <phase>package</phase> 
     <goals> 
      <goal>attach-artifact</goal> 
     </goals> 
     <configuration> 
      <artifacts> 
      <artifact> 
       <file>target/${project.artifactId}-${project.version}.apa</file> 
       <type>apa</type> 
      </artifact> 
      </artifacts> 
      <skipAttach>false</skipAttach> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

    <!-- generate javdoc --> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-javadoc-plugin</artifactId> 
    <executions> 
     <!-- generate xml javadoc --> 
     <execution> 
     <id>xml-doclet</id> 
     <phase>generate-resources</phase> 
     <goals> 
      <goal>javadoc</goal> 
     </goals> 
     <configuration> 
      <doclet>com.github.markusbernhardt.xmldoclet.XmlDoclet</doclet> 
      <additionalparam>-d ${project.build.directory}/generated-resources/xml-javadoc -filename ${project.artifactId}-${project.version}-javadoc.xml</additionalparam> 
      <useStandardDocletOptions>false</useStandardDocletOptions> 
      <docletArtifact> 
      <groupId>com.github.markusbernhardt</groupId> 
      <artifactId>xml-doclet</artifactId> 
      <version>1.0.4</version> 
      </docletArtifact> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
    <!-- Transform xml javadoc to stripped down version containing only class/interface comments and tags--> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>xml-maven-plugin</artifactId> 
    <version>1.0</version> 
    <executions> 
     <execution> 
     <id>transform-xmljavadoc</id> 
     <phase>generate-resources</phase> 
     <goals> 
      <goal>transform</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <transformationSets> 
     <transformationSet> 
      <dir>${project.build.directory}/generated-resources/xml-javadoc</dir> 
      <includes> 
      <include>${pmalhar.versioroject.artifactId}-${project.version}-javadoc.xml</include> 
      </includes> 
      <stylesheet>XmlJavadocCommentsExtractor.xsl</stylesheet> 
      <outputDir>${project.build.directory}/generated-resources/xml-javadoc</outputDir> 
     </transformationSet> 
     </transformationSets> 
    </configuration> 
    </plugin> 
    <!-- copy xml javadoc to class jar --> 
    <plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.6</version> 
    <executions> 
     <execution> 
     <id>copy-resources</id> 
     <phase>process-resources</phase> 
     <goals> 
      <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
      <outputDirectory>${basedir}/target/classes</outputDirectory> 
      <resources> 
      <resource> 
       <directory>${project.build.directory}/generated-resources/xml-javadoc</directory> 
       <includes> 
       <include>${project.artifactId}-${project.version}-javadoc.xml</include> 
       </includes> 
       <filtering>true</filtering> 
      </resource> 
      </resources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

</plugins> 

</build> 

    <dependencies> 
<!-- add your dependencies here --> 
<dependency> 
    <groupId>org.apache.apex</groupId> 
    <artifactId>malhar-library</artifactId> 
    <version>${malhar.version}</version> 
    <!-- 
     If you know that your application does not need transitive dependencies pulled in by malhar-library, 
     uncomment the following to reduce the size of your app package. 
    --> 
    <!-- 
    <exclusions> 
    <exclusion> 
     <groupId>*</groupId> 
     <artifactId>*</artifactId> 
    </exclusion> 
    </exclusions> 
    --> 
</dependency> 
<dependency> 
    <groupId>org.apache.apex</groupId> 
    <artifactId>malhar-contrib</artifactId> 
    <version>${malhar.version}</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.5.4</version> 
</dependency> 
<dependency> 
    <groupId>com.github.fge</groupId> 
    <artifactId>json-schema-validator</artifactId> 
    <version>2.0.1</version> 
    <optional>true</optional> 
</dependency> 
<dependency> 
    <groupId>net.sf.supercsv</groupId> 
    <artifactId>super-csv</artifactId> 
    <version>2.4.0</version> 
    <optional>true</optional> 
</dependency> 
<dependency> 
    <groupId>org.apache.apex</groupId> 
    <artifactId>apex-common</artifactId> 
    <version>${apex.version}</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.10</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>org.apache.apex</groupId> 
    <artifactId>apex-engine</artifactId> 
    <version>${apex.version}</version> 
    <scope>provided</scope> 
</dependency> 

Répondre

0

Deux choses -

  1. Vous devez savoir ce déplacement n'est pas "... relocalisé la dépendance httpClient" mais comme le suggère source -

    Si le uber JAR est réutilisé en tant que dépendance d'un autre projet, directement en incluant les classes des dépendances de l'artefact dans le uber JAR peut provoquer des conflits de chargement de classe en raison de classes en double sur le chemin de la classe. Pour résoudre ce problème, on peut déplacer les classes qui s'inclus dans l'artefact ombrée afin de créer une privée copie de leur bytecode

  2. Lorsque vous exécutez la mvn dependency:tree il afficherait toutes les dépendances (direct et transitif) inclus dans votre projet. Au lieu de cela, le plugin ombre Maven

ombre: l'ombre est liée à la phase de paquet et est utilisé pour créer un pot ombragé .

de renommer ou d'optimiser les dépendances plus loin. Ici va les détails pour Maven Shade Plugin -

Ce plugin offre la possibilité de conditionner l'artefact dans un uber-pot, y compris ses dépendances et à l'ombre - à savoir renommer - les paquets de quelques-unes des dépendances.

0

La dépendance n'est pas supprimée du POM d'origine, le comportement dependency:tree est donc correct. Shade plugin va également générer un nouveau POM (dependency-reduced-pom.xml) dans lequel les dépendances ombrées sont supprimées de la section <dependencies>. Cela ressemble à celui que vous êtes après.