You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Maven从同一Java单体项目生成CLIENT与SERVER两个JAR包?

迁移非Maven Java项目到Maven并生成双JAR包方案

一、用Maven插件实现(无需拆分项目)

完全可以通过Maven插件实现单项目生成两个JAR包,推荐使用maven-assembly-plugin或maven-shade-plugin,具体实现思路如下:

  1. 配置插件多执行实例
    在项目根pom.xml中添加插件配置,为CLIENT和SERVER分别定义独立的打包逻辑:
  • 针对每个模块指定专属主类、需要包含的源码/资源目录、依赖集合
  • 可通过自定义assembly描述文件(XML)精细控制打包范围,区分CLIENT和SERVER的代码路径

示例配置片段(以maven-assembly-plugin为例):

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.6.0</version>
      <executions>
        <!-- CLIENT打包配置 -->
        <execution>
          <id>package-client</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptor>src/main/assembly/client-assembly.xml</descriptor>
            <finalName>client-${project.version}</finalName>
          </configuration>
        </execution>
        <!-- SERVER打包配置 -->
        <execution>
          <id>package-server</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptor>src/main/assembly/server-assembly.xml</descriptor>
            <finalName>server-${project.version}</finalName>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
  1. 编写assembly描述文件
    在src/main/assembly下创建client-assembly.xml和server-assembly.xml,分别定义各自的打包范围:
    比如client-assembly.xml中指定只包含CLIENT相关代码和资源:
<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>client</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
      <includes>
        <include>com/yourproject/client/**/*</include>
        <include>com/yourproject/common/**/*</include> <!-- 若有公共代码 -->
      </includes>
    </fileSet>
    <fileSet>
      <directory>src/main/resources</directory>
      <includes>
        <include>client/**/*</include>
      </includes>
    </fileSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/</outputDirectory>
      <useProjectArtifact>false</useProjectArtifact>
      <unpack>true</unpack>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>
  <archive>
    <manifest>
      <mainClass>com.yourproject.client.Main</mainClass> <!-- CLIENT主类 -->
    </manifest>
  </archive>
</assembly>
  1. 在NetBeans中执行打包
  • 打开项目的Maven面板,找到assembly插件下的package-client和package-server目标,分别执行即可生成对应JAR
  • 或直接执行mvn clean package命令,插件会在打包阶段自动生成两个JAR包

二、拆分多模块Maven项目(更规范的长期方案)

如果插件配置繁琐,或项目后续有独立维护CLIENT/SERVER的需求,拆分多模块是更合理的选择:

  1. 创建父项目结构
    根目录创建pom.xml,设置packaging为pom并声明子模块:
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yourproject</groupId>
  <artifactId>parent-project</artifactId>
  <version>1.0.0</version>
  <packaging>pom</packaging>
  <modules>
    <module>client</module>
    <module>server</module>
    <!-- 若有公共代码,可添加common模块 -->
    <module>common</module>
  </modules>
</project>
  1. 创建子模块
  • 在根目录下创建client和server子目录,每个子目录单独创建pom.xml,配置打包为jar并指定各自的主类和依赖
  • 将原项目中CLIENT相关的代码、Swing表单文件、资源复制到client/src/main/java和client/src/main/resources目录;同理处理SERVER模块
  1. NetBeans中管理多模块
  • 直接导入父项目,NetBeans会自动识别所有子模块
  • 执行父项目的clean package目标,会同时生成两个子模块的JAR包;也可单独对某个子模块执行打包操作

注意事项

  • 若存在CLIENT和SERVER共用的代码,建议提取为独立的common子模块,让CLIENT和SERVER依赖该模块,避免代码冗余
  • Swing表单相关的文件(如NetBeans生成的.form文件)需确保在Maven资源目录配置中被正确包含,避免打包时丢失

内容的提问来源于stack exchange,提问作者matteo baudino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:31:13