2012-07-05 131 views
2

我创建了一个C/S框架作为多模块Maven项目。它有三个模块:“服务器”,“客户端”和“通用”。 “通用”模块中的类用于“服务器”和“客户端”。Maven多模块项目编译

但是我不想单独使用common.jar。相反,我希望将“通用”模块中的类直接编译为server.jarclient.jar。有什么办法可以做到吗?

回答

0

使用maven assembly plugin with pre-defined descriptor jar-with-dependencies

选项1: 包含在 '服务器' 项目的pom.xml如下:

<build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.3</version> 
     <configuration> 
      <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 

这将包括其他第三方的依赖,以及,如果您有任何。

选项2: 此选项用于排除第三方库(如果有)。

1.在pom.xml的同一个目录下按如下所示创建一个assembly.xml。

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <id>custom</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <useProjectArtifact>true</useProjectArtifact> 
      <unpack>true</unpack> 
      <scope>runtime</scope> 
      <includes> 
       <include>common</include> 
      </includes> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

的包括标签必须包含<groupId>:<artifactId>格式,这里只是artifactId的“共同”被提及,因为我不知道你的groupId。

在 '服务器' 的pom.xml 2.Include以下:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <descriptors> 
        <descriptor>assembly.xml</descriptor> 
       </descriptors> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

运行组件命令(组件:单)。

0

完成此操作的最佳方法是使用maven-shade-plugin

添加到您的服务器/客户端POM:

<project> 
    ... 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>1.7.1</version> 
       <configuration> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
    ... 
</project> 

您将结束与common类在同一个罐子作为server/client