问题产生场景:多个不同的业务系统使用公共的JS文件和核心的业务JS文件,每创建一个web项目就需要将这些文件都拷贝到每个项目中去,如果修改了任何一个JS文件就需要更新使用这个JS文件的系统,效率非常低下,所以考虑用maven管理jar包一样管理公共Web资源。
实现目标:每个业务系统能正常访问统一的Web资源,业务系统在相同文件目录下存在相同文件,则业务系统文件覆盖掉公共库中的文件;在开发过程中修改公共库的Web资源能够实时发布到业务系统项目中去。
配置方式如下:
- 公共库packaging类型由原来的jar改为war,如下:
<groupId>com.projects</groupId> <artifactId>projects-common</artifactId> <version>${projects.version}</version> <packaging>war</packaging>
- 使用maven-war-plugin进行打包,通过配置项打包公共库,分别打出war包和jar包,不影响现有项目对公共库jar包的依赖。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <!-- 把class打包jar作为附件 --> <attachClasses>true</attachClasses> <!-- 把class打包jar --> <archiveClasses>true</archiveClasses> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build>
- 在项目中添加对公共库的war包依赖,由于在项目的父pom文件中已经引入了maven-war-plugin插件,所以不再单独引入。
<dependency> <groupId>com.projects</groupId> <artifactId>projects-common</artifactId> <version>${projects.version}</version> </dependency> <dependency> <groupId>com.projects</groupId> <artifactId>projects-common</artifactId> <version>${projects.version}</version> <type>war</type> </dependency>
总结:这种方式有一定的局限性,如果只引用了jar包,则无法解析jar包的pom依赖。所以还是最终决定将jar和war资源分为两个不同的公共包,在需要的项目中分别引用。
问题产生场景:多个不同的业务系统使用公共的JS文件和核心的业务JS文件,每创建一个web项目就需要将这些文件都拷贝到每个项目中去,如果修改了任何一个JS文件就需要更新使用这个JS文件的系统,效率非常低下,所以考虑用maven管理jar包一样管理公共Web资源。 实现目标:每个业务系统能正常访问统一的Web资源,业务系统在相同文件目录下存在相同文件,则业务系统文件覆盖掉公共库中的文件;在开发过程中修改公共库的Web资源能够实时发布到业务系统项目中去。 配置方式如下:- 公共库packaging类型由原来的jar改为war,如下: