Maven多模块项目编译

时间:2012-07-05 02:27:32

标签: java maven module dependencies

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

但我不想要一个独立的common.jar。相反,我希望将“common”模块中的类直接编译为server.jarclient.jar。我有什么方法可以做到吗?

3 个答案:

答案 0 :(得分:2)

您可以将maven dependency plugin unpack常用jar用于其他项目。

答案 1 :(得分: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>

include标记必须包含<groupId>:<artifactId>格式,这里只提到artifactId'common',因为我不知道你的groupId。

2.在'server'pom.xml中包含以下内容:

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

运行assembly命令(assembly:single)。

答案 2 :(得分: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个类。