2016-12-16 91 views
1

我有一個WAR文件,它在我的彙編模塊中作爲依賴包含在其中。 WAR文件包含一些屬性,我想在我新生成的WAR文件中排除這些屬性。使用程序集排除* .war文件中的屬性文件

由於未知原因排除不起作用。即使我使用**/*.properties排除所有屬性文件,也不排除這些文件。任何想法這裏有什麼問題?

Maven POM文件

<?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>de.mycompanyname.myprojectname</groupId> 
<version>1.0-SNAPSHOT</version> 

<artifactId>demo-dashboard-assembly</artifactId> 
<packaging>pom</packaging> 
<name>demo-dashboard-assembly</name> 

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.5.3</version> 
      <goals></goals> 
      <executions> 
       <execution> 
        <id>delivery-prod</id> 
        <phase>prepare-package</phase> 
        <goals><goal>single</goal></goals> 
        <configuration> 
         <appendAssemblyId>false</appendAssemblyId> 
         <finalName>demo#prod#dashboard</finalName> 
         <descriptors> 
          <descriptor>src/main/assembly/delivery.prod.xml</descriptor> 
         </descriptors> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>de.mycompanyname</groupId> 
     <artifactId>myprojectname.dashboard</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
</dependencies> 

</project> 

delivery.prod.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"> 
<id>delivery</id> 
<formats> 
    <format>dir</format> 
</formats> 
<includeBaseDirectory>false</includeBaseDirectory> 

<dependencySets> 
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <unpack>true</unpack> 
     <excludes> 
      <exclude>WEB-INF/classes/commonDashboard.dev.properties</exclude> 
      <exclude>WEB-INF/classes/commonDashboard.test.properties</exclude> 
      <exclude>WEB-INF/classes/db.dev.properties</exclude> 
      <exclude>WEB-INF/classes/db.test.properties</exclude> 
     </excludes> 
    </dependencySet> 
</dependencySets> 
</assebly> 

回答

1

的問題是you're not using the right <exclude> configuration

通過在<dependencySet>級別指定<exclude>

<dependencySet> 
    <outputDirectory>/</outputDirectory> 
    <unpack>true</unpack> 
    <excludes> 
    <exclude>WEB-INF/classes/commonDashboard.dev.properties</exclude> 
    <!-- more excludes --> 
    </excludes> 
</dependencySet> 

你指定應該被排除在這一集的依賴關係。也就是說,它指定了不應該解壓縮到根文件夾的依賴關係。顯然,由於沒有WEB-INF/classes/...依賴關係,它不匹配並且執行任何操作。事實上,這將引發一個警告,那你可以在日誌中看到:你想要什麼,而不是

[WARNING] The following patterns were never triggered in this artifact exclusion filter: 
o 'WEB-INF/classes/commonDashboard.dev.properties' 
o 'WEB-INF/classes/commonDashboard.test.properties' 
o 'WEB-INF/classes/db.dev.properties' 
o 'WEB-INF/classes/db.test.properties' 

,是到拆包的依賴中排除文件。對於這一點,你需要使用<unpackOptions>元素,它包含一個排除配置:

指定包括/排除/過濾從檔案中提取的項目選擇。 (自2.2-β-1)

因此,你應該有代替:

<dependencySets> 
    <dependencySet> 
    <outputDirectory>/</outputDirectory> 
    <unpack>true</unpack> 
    <unpackOptions> 
     <excludes> 
     <exclude>WEB-INF/classes/commonDashboard.dev.properties</exclude> 
     <exclude>WEB-INF/classes/commonDashboard.test.properties</exclude> 
     <exclude>WEB-INF/classes/db.dev.properties</exclude> 
     <exclude>WEB-INF/classes/db.test.properties</exclude> 
     </excludes> 
    </unpackOptions> 
    </dependencySet> 
</dependencySets> 

這將正確每個依賴的拆包期間排除所選的文件,並且所得到的組件將不具有他們。請注意,您可以使用use a regular expression而不是指定每個文件;例如:

<exclude>%regex[WEB-INF\/classes\/(commonDashboard|db)\.(dev|test)\.properties]</exclude> 
+0

我不知道這個選項。感謝您的解釋! – KayJ