2017-06-17 18 views
2

在我的项目,我有两个班Test1.javaTest2.java,我的意思是这样的方式建造两个罐子是test1.jar应该包含只有Tets1.javatest2.jar应该只包含Tets2.java排斥和融入的Maven Assembly插件不工作

我已经添加在Maven的组装插件排斥和包容,但似乎没有工作,在这两个罐子,我能看到Test1.javaTest2.java

的pom.xml下面

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>build-a</id> 
        <configuration> 
         <excludes> 
          <exclude>Test2.java</exclude> 
         </excludes> 
         <includes> 
          <include>Test1.java</include> 
         </includes> 
         <archive> 
          <manifest> 
           <mainClass>com.example.MyMain</mainClass> 
          </manifest> 
         </archive> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
         <finalName>test1.jar</finalName> 
        </configuration> 
        <phase>package</phase> 
        <goals> 
         <goal>assembly</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>build-b</id> 
        <configuration> 
         <excludes> 
          <exclude>Test1.java</exclude> 
         </excludes> 
         <includes> 
          <include>Test2.java</include> 
         </includes> 
         <archive> 
          <manifest> 
           <mainClass>com.example.MyMain</mainClass> 
          </manifest> 
         </archive> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
         <finalName>test2.jar</finalName> 
        </configuration> 
        <phase>package</phase> 
        <goals> 
         <goal>assembly</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

更新版本(pom.xml中)

中给出
+0

通常罐子包含'.class'文件。 – PeterMmm

+0

@PeterMmm是当我提取jar文件时,我得到了类文件Test1.class和Test2.class –

+0

你可以使用最新版本的pom.xml编辑你的问题,包括@Mureinik的建议吗? – ToYonos

回答

3

<include><exclude>是路径元素,所以您需要指定整个路径(或某些通配符),而不仅仅是文件名。例如:

<excludes> 
    <exclude>**/Test2.*</exclude> 
</excludes> 
<includes> 
    <include>**/Test1.*</include> 
</includes> 
+0

我也试过这个,但仍然当我提取jar文件时,我得到了类文件'Test1.class'和'Test2.class' –

+0

@AlexMan ,包含/排除在源'.java'文件中,而不是'.class'文件。如果你想申请它们,你可以使用'.class'后缀,或者像我在编辑过的答案中那样使用通配符。 – Mureinik

+0

我试过也还是没有运气......,我们需要指定包装 –

2

您应该使用自定义assembly.xml文件。

test1.jar

例子:

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd"> 
    <id>test1.jar</id> 
    <formats> 
    <format>jar</format> 
    </formats> 
    <fileSets> 
    <fileSet> 
     <directory>src/main/java/</directory> 
     <excludes> 
      <exclude>**/Test2.*</exclude> 
     </excludes> 
     <includes> 
      <include>**/Test1.*</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 

而在你pom.xml取代:

<descriptorRefs> 
    <descriptorRef>jar-with-dependencies</descriptorRef> 
</descriptorRefs> 

有:

<descriptors> 
    <descriptor>assembly.xml</descriptor> 
</descriptors> 
+0

但我有两个罐子,权利'test1.jar'和'test2。 jar'。当我这样做时,它会对两个罐子 –

+0

产生影响。我认为你需要创建自定义的'assemble.xml'文件。 – ToYonos

+0

文档:http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html – ToYonos