【问题标题】:Maven multi-module project compileMaven多模块项目编译
【发布时间】:2012-07-05 10:27:36
【问题描述】:

我创建了一个 C/S 框架作为多模块 Maven 项目。它包含三个模块:“server”、“client”和“common”。 "common" 模块中的类被 "server" 和 "client" 使用。

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

【问题讨论】:

    标签: java maven module dependencies


    【解决方案1】:

    您可以使用maven dependency pluginunpack 的通用jar 进入其他项目。

    【讨论】:

      【解决方案2】:

      使用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 标签必须包含&lt;groupId&gt;:&lt;artifactId&gt; 格式,这里只提到artifactId 'common' 因为我不知道你的groupId。

      2.在“服务器”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:single)。

      【讨论】:

        【解决方案3】:

        完成此操作的最佳方法是使用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>
        

        您最终会在与server/client 相同的jar 中得到common 类。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-29
          • 2016-09-24
          • 1970-01-01
          • 2018-02-06
          • 1970-01-01
          • 2021-02-09
          • 2011-01-04
          相关资源
          最近更新 更多