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

如何在Tomcat中打包JAX-WS服务依赖至WAR文件不影响其他服务

没问题,这其实是Java Web项目里非常常见的需求——把JAX-WS相关的依赖直接打包到WAR文件的WEB-INF/lib目录下,让你的服务拥有完全独立的依赖环境,不会和Tomcat全局$TOMCAT/lib里的包产生冲突,也不会影响服务器上的其他服务。下面给你两种最实用的实现方式:

方式一:使用Maven构建(推荐,适合大多数项目)

Maven会自动帮你管理依赖并打包到指定目录,步骤非常清晰:

  • 第一步:在pom.xml中正确声明JAX-WS及其他服务依赖,注意scope要保持默认的compile(如果之前设成provided要改回来,provided是让容器提供依赖,现在我们要自己打包)。示例配置:
<dependencies>
    <!-- JAX-WS API 依赖 -->
    <dependency>
        <groupId>javax.xml.ws</groupId>
        <artifactId>jaxws-api</artifactId>
        <version>2.3.1</version>
    </dependency>
    <!-- JAX-WS 运行时依赖 -->
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.3.3</version>
    </dependency>
    <!-- 其他你的业务依赖,比如日志、工具类等 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.36</version>
    </dependency>
</dependencies>
  • 第二步:确认Maven War插件配置(默认即可,如需自定义可添加)
    默认情况下,Maven War插件会自动把所有compile和runtime scope的依赖打包到WEB-INF/lib。如果需要排除某些不需要的依赖,可以添加插件配置:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version>
            <configuration>
                <!-- 示例:排除所有以unwanted开头的jar包 -->
                <packagingExcludes>WEB-INF/lib/unwanted-*.jar</packagingExcludes>
            </configuration>
        </plugin>
    </plugins>
</build>
  • 第三步:执行打包命令
    在项目根目录运行:
mvn clean package

生成的WAR文件会在target目录下,解压后就能看到WEB-INF/lib里已经包含了所有你声明的依赖。

方式二:手动打包(适合小型项目或无构建工具的场景)

如果不用构建工具,手动整理目录结构也能实现:

  • 第一步:收集所有依赖jar包
    把JAX-WS的API包、运行时包,以及你的服务编译依赖的其他jar全部收集好。
  • 第二步:搭建标准WAR目录结构
    创建如下目录结构:
your-jaxws-service.war/
├── WEB-INF/
│   ├── lib/          # 把所有收集到的依赖jar放到这个目录
│   ├── classes/      # 存放你的服务编译后的.class文件
│   └── web.xml       # 配置JAX-WS的Servlet映射(如果不用注解自动部署)
└── META-INF/
    └── MANIFEST.MF
  • 第三步:配置web.xml(可选,若用注解则无需)
    如果你的服务没有用@WebService这类注解自动部署,需要在web.xml里配置JAX-WS的Servlet:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>MyJaxWsService</servlet-name>
        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyJaxWsService</servlet-name>
        <url-pattern>/ws/*</url-pattern>
    </servlet-mapping>
</web-app>
  • 第四步:打包成WAR文件
    在WAR根目录下执行命令:
jar -cvf your-jaxws-service.war .
关键注意事项
  • 不要打包Tomcat自带的API(比如servlet-api、jsp-api),这些依赖要设为provided scope,避免和Tomcat全局包冲突。
  • 如果使用Tomcat 7及以上版本,默认支持JAX-WS的注解部署;若用更老的Tomcat版本,可能需要额外配置,但现在大部分生产环境都是用较新版本的Tomcat了。
  • 部署后,Tomcat会优先加载WEB-INF/lib里的jar包,完全隔离你的服务和其他应用的依赖环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:21:49