首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven多模块项目编译

Maven多模块项目编译
EN

Stack Overflow用户
提问于 2012-07-05 10:27:32
回答 3查看 939关注 0票数 2

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

然而,我不想要一个独立的common.jar。相反,我希望将“公共”模块中的类直接编译为server.jarclient.jar。有没有办法让我去呢?

EN

回答 3

Stack Overflow用户

发布于 2012-07-05 11:15:39

您可以使用maven dependency plugin将通用jar unpack到其他项目中。

票数 2
EN

Stack Overflow用户

发布于 2012-07-05 12:43:03

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

服务器选项1:在‘’项目pom.xml中包含以下内容:

代码语言:javascript
复制
  <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,如下所示。

代码语言:javascript
复制
<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.在“服务器”pom.xml中包含以下内容:

代码语言:javascript
复制
<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)。

票数 0
EN

Stack Overflow用户

发布于 2012-07-05 16:14:10

实现这一点的最佳方法是使用maven-shade-plugin

将以下内容添加到您的服务器/客户端pom:

代码语言:javascript
复制
<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类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11337186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档