2015-05-04 14 views
6

Non ottengo alcun errore con questo codice. Solo che il file che voglio escludere viene ancora aggiunto. Sto usando il plugin Maven per EclipseDesidero escludere alcuni file di classe dal mio jar. Sto usando maven-assembly-plugin. Aggiunge ancora i file. Non ottengo alcun errore

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>only</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>com.Main</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <excludes> 
        <exclude>**/com/uiservices/controllers/*.*  </exclude> 
       </excludes> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

risposta

9

Il maven-assembly-plugin non funziona così.

Là ciò che si vuole fare è sovrascrivere la configurazione del descrittore di assieme jar-with-dependencies e ciò non è possibile.

Se ciò che si vuole fare è creare un vaso simile a quello creato dall'assieme jar-with-dependencies ma senza alcune classi specifiche del proprio progetto, è necessario scrivere il proprio assieme e chiamarlo nello maven-assembly-plugin come segue.

Assemblea in src/assembly/jar-with-deps-with-exclude.xml:

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> 
    <!-- TODO: a jarjar format would be better --> 
    <id>jar-with-dependencies-and-exclude-classes</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <useProjectArtifact>false</useProjectArtifact> 
      <unpack>true</unpack> 
      <scope>runtime</scope> 
     </dependencySet> 
    </dependencySets> 
    <fileSets> 
     <fileSet> 
      <outputDirectory>/</outputDirectory> 
      <directory>${project.build.outputDirectory}</directory> 
      <excludes> 
       <exclude>com/uiservices/controllers/*.*</exclude> 
      </excludes> 
     </fileSet> 
    </fileSets> 
</assembly> 

Questo creerà un assieme senza le dipendenze non imballati, con le classi aggiunte ad eccezione di quelli esclusi.

E poi nel vostro pom.xml:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>only</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
        <descriptor>src/assembly/jar-with-deps-with-exclude.xml</descriptor> 
       </descriptors> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Ma se quello che vi serve è il vostro vaso classico senza classi escluse, è possibile li escludere nella maven-jar-plugin direttamente:

<plugin> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <excludes> 
      <exclude>com/uiservices/controllers/*.*</exclude> 
     </excludes> 
    </configuration> 
</plugin> 
+0

Ho avuto la stessa domanda/problema dell'OP e questa soluzione suggerita ha risolto il mio problema. –

0

Ho avuto un problema simile con maven-assembly-plugin:

  1. Progetto beans-conversion ha i file application.properties, logback.xml e logback.xsd
  2. progetto extract-conversion ha anche file chiamati application.properties, logback.xml, e logback.xsd
  3. Requisito è extract-conversion.jar dovrebbe includere beans-conversion.jar contenuto, ma application.properties, logback.xml, e logback.xsd di extract-conversion.jar dovrebbe eseguire l'override del beans-conversion.jar.

Soluzione:

Abbiamo risolto questo usando maven-shade-plugin come di seguito nella pom.xml di estratto di conversione.

... 
<dependency> 
    <groupId>com.mycompany</groupId> 
    <artifactId>beans-conversion</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
</dependency> 
... 
<build> 
    <finalName>${project.artifactId}</finalName> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <includes> 
       <include>application.properties</include> 
       <include>logback.xml</include> 
       <include>logback.xsd</include> 
      </includes> 
      <filtering>true</filtering> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
       <encoding>UTF-8</encoding> 
      </configuration> 
     </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> 
         <filters> 
          <filter> 
           <artifact>com.mycompany:beans-conversion</artifact> 
           <excludes> 
            <exclude>application.properties</exclude> 
            <exclude>logback.xml</exclude> 
            <exclude>logback.xsd</exclude> 
           </excludes> 
          </filter> 
          <filter> 
           <artifact>*:*</artifact> 
           <excludes> 
            <exclude>META-INF/*.SF</exclude> 
            <exclude>META-INF/*.DSA</exclude> 
            <exclude>META-INF/*.RSA</exclude> 
           </excludes> 
          </filter> 
         </filters> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin>     
    </plugins> 
</build>