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

如何用Maven自动构建javax与jakarta双版本Servlet工具类库

实现方案(全程仅操作target目录,无原源码污染风险)

核心逻辑是先将原源码完整复制到target下的临时构建目录,在临时目录完成javax到jakarta的import替换后,仅编译临时目录代码生成产物,全程不修改src目录下的任何文件,不会干扰Git状态。
以下配置均添加到你的jakarta专属Maven Profile中即可:

1. 复制原源码到target临时目录

通过maven-resources-plugin在构建初期把所有Java源码复制到target/generated-sources/jakarta目录:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>3.3.1</version>
  <executions>
    <execution>
      <id>copy-sources-for-jakarta</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>copy-resources</goal>
      </goals>
      <configuration>
        <outputDirectory>${project.build.directory}/generated-sources/jakarta</outputDirectory>
        <resources>
          <resource>
            <directory>src/main/java</directory>
            <filtering>false</filtering>
          </resource>
        </resources>
      </configuration>
    </execution>
  </executions>
</plugin>

2. 批量替换临时目录下的import语句

使用maven-replacer-plugin仅修改临时目录中的Java文件,完成javax.servlet到jakarta.servlet的命名空间替换:

<plugin>
  <groupId>com.google.code.maven-replacer-plugin</groupId>
  <artifactId>replacer</artifactId>
  <version>1.5.3</version>
  <executions>
    <execution>
      <id>replace-javax-to-jakarta</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>replace</goal>
      </goals>
      <configuration>
        <basedir>${project.build.directory}/generated-sources/jakarta</basedir>
        <includes>
          <include>**/*.java</include>
        </includes>
        <replacements>
          <replacement>
            <token>import javax.servlet</token>
            <value>import jakarta.servlet</value>
          </replacement>
          <!-- 如有其他需要迁移的javax命名空间,可在此处新增替换规则 -->
        </replacements>
      </configuration>
    </execution>
  </executions>
</plugin>

3. 配置编译规则,仅编译临时目录代码

通过build-helper-maven-plugin将临时目录加入编译源,同时配置maven-compiler-plugin排除原src目录的源码,避免冲突:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>3.4.0</version>
  <executions>
    <execution>
      <id>add-jakarta-source-root</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>add-source</goal>
      </goals>
      <configuration>
        <sources>
          <source>${project.build.directory}/generated-sources/jakarta</source>
        </sources>
      </configuration>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.11.0</version>
  <configuration>
    <excludes>
      <exclude>**/*.java</exclude>
    </excludes>
    <includes>
      <include>${project.build.directory}/generated-sources/jakarta/**/*.java</include>
    </includes>
  </configuration>
</plugin>

可选优化

如果后续命名空间替换规则变复杂,可替换maven-replacer-plugin为OpenRewrite的Jakarta EE迁移配方,可自动完成全量javax到jakarta的命名空间迁移,同样仅操作临时目录不影响原源码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:15:03