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

如何移除依赖JAR包中的签名?适配Maven WebStart转Tomcat组件场景

解决WebStart签名JAR在Tomcat WAR组件中复用的问题

我完全懂这种被遗留约束绑住的感觉——不用纠结设计合理性,咱们直接搞定实际问题。针对你要把foo项目的部分模块用到bar这个Tomcat WAR组件里的需求,给你几个可行的方案:

  • 优先方案:拆分共用模块
    把foo里需要给bar复用的代码单独抽成一个独立的Maven模块(比如叫foo-shared),这样:

    • foo的WebStart项目可以依赖这个模块,正常用maven-jarsigner-plugin签名整个WebStart包;
    • bar的WAR项目直接依赖这个未签名的共用模块,打包时自然就把代码包含进去,完全避开签名相关的麻烦。
      这是最干净的做法,也能避免后续维护的坑。
  • 如果必须用已签名的JAR
    要是没法拆分模块,只能直接用foo的签名JAR,得处理两个关键点:

    1. 排除WebStart特定内容
      签名的WebStart JAR里会有JNLP-INF目录和签名文件(.SF、.DSA、.RSA),这些对Tomcat来说没用,甚至可能导致加载异常。你可以在bar的Maven项目里用maven-dependency-plugin解压并排除这些内容:

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <executions>
              <execution>
                  <id>unpack-foo-signed-jar</id>
                  <phase>process-resources</phase>
                  <goals>
                      <goal>unpack</goal>
                  </goals>
                  <configuration>
                      <artifactItems>
                          <artifactItem>
                              <groupId>你的项目groupId</groupId>
                              <artifactId>foo</artifactId>
                              <version>对应版本号</version>
                              <type>jar</type>
                              <outputDirectory>${project.build.directory}/classes</outputDirectory>
                              <excludes>JNLP-INF/**,META-INF/*.SF,META-INF/*.DSA,META-INF/*.RSA</excludes>
                          </artifactItem>
                      </artifactItems>
                  </configuration>
              </execution>
          </executions>
      </plugin>
      

      这样处理后,打包进WAR的就只有实际需要的代码,不会带签名和WebStart相关的冗余内容。

    2. 处理Tomcat的权限问题
      如果你的场景必须保留签名文件,那得确保Tomcat允许加载这个签名JAR。可以修改Tomcat的catalina.policy文件,添加对应的权限配置:

      grant codeBase "file:${catalina.base}/webapps/bar/WEB-INF/lib/foo.jar" {
          // 根据实际需求调整权限,别直接用AllPermission
          permission java.security.AllPermission;
      };
      

      注意:尽量不要用AllPermission,根据代码实际需要的权限来配置,避免安全风险。

  • 依赖管理注意事项
    不管用哪种方案,确保bar项目能正确拉取到foo的模块/ JAR:

    • 如果是本地多模块项目,直接在bar的pom.xml里添加模块依赖;
    • 如果foo已经发布到Maven仓库,直接添加对应的<dependency>节点即可,依赖范围用compile,这样会自动打包进WAR的WEB-INF/lib目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:23:44