maven war包依懒且jar包也依懒

该博客讨论了如何使用Maven配置,在A工程中将webapp的类打包成JAR,并在B工程中作为依赖引用。通过在A工程的pom.xml中配置maven-war-plugin,可以生成包含类的JAR和WAR包。B工程则通过指定classifier和scope为provided来依赖A工程的类JAR和WAR包。这样实现了不同webapp之间的类复用和依赖管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因历史原因,A工程webapp的工程被B工程的webapp所依懒,并且A的类做为公用类被B类所用

A工程的pom.xml----------------------------------------------------------

<artifactId>tuig-xxxx-common</artifactId>
<version>4.0.0-SNAPSHOT</version>
<packaging>war</packaging>
<build>
   <plugins>
      <!-- war包管理 -->
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-war-plugin</artifactId>
         <configuration>
            <!-- 将所有classes文件封装成jar包放到WEB-INF/lib目录下 -->
            <archiveClasses>true</archiveClasses>
            <!--其他工程依懒此JAR-->
            <attachClasses>true</attachClasses>
         </configuration>
      </plugin>
   </plugins>
</build>

此时target目录会输入一个war包,一个jar包tuig-xxxx-common-4.0.0-SNAPSHOT-classes.jar、tuig-xxxx-common-4.0.0-SNAPSHOT.war

B工程的pom.xml----------------------------------------------------------

<!--业务合并(war包依赖)-->
<dependency>
   <groupId>com.tuig.xxxx</groupId>
   <artifactId>tuig-xxxx-common</artifactId>
   <version>4.0.0-SNAPSHOT</version>
   <classifier>classes</classifier>
   <!--只在编译时调用-->
   <scope>provided</scope>
   <type>jar</type>
</dependency>
<dependency>
   <groupId>com.tuig.xxxx</groupId>
   <artifactId>tuig-xxxx-common</artifactId>
   <version>4.0.0-SNAPSHOT</version>
   <type>war</type>
</dependency>

附maven官网 fqa-----------------------------------------------------------------------

  1. 如何在Webapp中创建包含类的JAR?

如何在WAR插件中进行过滤?

要启用对web.xml的过滤,您必须像下面这样配置WAR插件:



 
  1. <plugin>
  2. <artifactId>maven-war-plugin</artifactId>
  3. <version>3.3.1</version>
  4. <configuration>
  5. <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
  6. </configuration>
  7. </plugin>

示例可以在这里找到。

[最佳]


依赖性工件的分类器如何影响我的WAR项目?

使用时,项目中依赖项工件的副本将在其文件名后附加分类器。这可用于区分重复的工件。

[最佳]


如何从项目中排除传递依赖项?

给它一个“提供”的范围。

[最佳]


使用dependentWarExclude和提供的作用域有什么区别?

relatedWarExclude用于叠加层中,以从组装的Web应用程序中排除依赖的WAR文件。

[最佳]


如何排除网络资源中的文件?

使用<webResources> / <exclude>参数来标识要排除的令牌。

有关更多信息,请参阅添加和过滤外部Web资源

[最佳]


进行叠加时如何排除文件?

使用dependentWarExcludes参数来标识要排除的标记。

[最佳]


在哪里可以找到有关插件配置的文档?

对于每个目标,您都可以使用插件站点中的文档。

如果您需要特定版本,请使用mvn site:site生成它,或使用:



 
  1. MVN帮助形容- Dplugin =战争- Dfull =- Dversion = <你的-插件--在这里>

[最佳]


如何在Webapp中创建包含类的JAR?

如果您只是想将类和资源打包为WEB-INF / lib中的JAR 而不是WEB-INF / classes下的松散文件,请使用以下配置:

 

  1. <plugin>
  2. <artifactId>maven-war-plugin</artifactId>
  3. <version>3.3.1</version>
  4. <configuration>
  5. <archiveClasses>true</archiveClasses>
  6. </configuration>
  7. </plugin>

如果您需要在另一个项目中重复使用此JAR,建议的方法是将类移动到构建JAR的单独模块中,然后从您的Web应用程序以及需要的任何其他项目中声明对该JAR的依赖它。

如果您不能将类移动到另一个项目,则可以使用以下配置器,通过分类器将Web应用程序中包含的类和资源作为“附加”工件部署:

 

  1. <project>
  2. ...
  3. <artifactId>mywebapp</artifactId>
  4. <version>1.0-SNAPSHOT</version>
  5. ...
  6. <build>
  7. <plugins>
  8. <plugin>
  9. <artifactId>maven-war-plugin</artifactId>
  10. <version>3.3.1</version>
  11. <configuration>
  12. <attachClasses>true</attachClasses>
  13. </configuration>
  14. </plugin>
  15. </plugins>
  16. </build>
  17. ...
  18. </project>

这将导致部署两个工件:mywebapp-1.0-SNAPSHOT.war 和mywebapp-1.0-SNAPSHOT-classes.jar。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值