使用maven构建web项目
最近在适应maven的项目构建方式,在某个web项目的基础上将原来的项目修改为maven build的方式(原来是eclipse项目方式构建),其中遇到了很多的问题,以下是总结和归纳:
1. 编写maven头
确定groupId, artifactId, version后一步步来就可以了:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yonyou.nc.codevalidator.web</groupId> <artifactId>ruleValidator</artifactId> <packaging>war</packaging> <version>1.0.0</version> ......
2. 增加dependencies
原有的jar包依赖还是原始的方式,在项目中存在一个lib包,其中包含了所有的jar包,这对于项目管理就是噩梦,特别是在以后升级spring, hibernate等工具包的时候,而且找寻源码也是一项费时费力的过程。
<dependencies> <dependency> <groupId>antlr</groupId> <artifactId>antlr</artifactId> <version>2.7.6</version> </dependency> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.7.4</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.7.4</version> </dependency>
但是,如果有的包在maven仓库中不存在,该怎么办?尤其是还不想搭建私服,这里有两种方式,一种是自定义groupId, artifactId的方式将其组织在.m2/repository中,还有一种方式就是设置为system类型的依赖,这里采用的是后者。
<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson.mapper</artifactId> <version>1.9.1</version> <scope>system</scope> <systemPath>${project.path}/WebContent/WEB-INF/lib/jackson.mapper.jar</systemPath> </dependency>
当然这种方式的最大缺点就是与当前机器(环境)紧密依赖,这使得每个人都需要自己修改本地路径,这里最好的方式就是建立局域网私服(可以考虑使用nexus)。
提供全局的配置工程路径来确定私有jar包的位置:
<properties> <spring.version>3.2.0.M1</spring.version> <project.path>D:/Develop/GitRepo-nc/rulevalidator-ncrcc/RuleValidator/rulevalidator</project.path> </properties>
3. 打包设置
pom的package标签决定了项目的打包类型,web项目中肯定会包括一些基本的配置资源信息,通常会放置在WebContent目录中,这些也肯定要打包到对应的war包中。这就需要设置build选项,给予相应的插件来添加web目录:
<build> <finalName>ruleValidator</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <webResources> <resource> <directory>WebContent</directory> </resource> </webResources> </configuration> </plugin> ......
上述配置会将war包名称确定为ruleValidator,其中复制对应WebContent目录。
4. 多源文件夹的设置
我们知道,maven 默认只支持一个源文件夹,如果源文件不属于maven默认的文件夹(src/main/java),就需要在build标签中配置
<sourceDirectory>src</sourceDirectory>
为了给项目配置多个源文件夹,我们需要用到一个 Maven 插件,目的是在 Maven 构建生命周期内为项目添加源文件夹。
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.4</version> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>src/account</source> <source>src/basedao</source> <source>src/rule</source> <source>src/webpub</source> </sources> </configuration> </execution> </executions> </plugin>
这样就会将src/account, src/basedao等4个文件夹都作为源文件夹进行编译,并将编译后的class打到对应的war包中。
5. 镜像库的配置
maven默认使用的是repo1.maven.org官网,但有时候官网的网速并不快,这就需要我们在项目或用户目录下配置国内的镜像仓库,这里使用的是国内的OSChina.net:
<repositories> <repository> <id>oschina.net</id> <name>OSChina.net</name> <url>http://maven.oschina.net/content/groups/public/</url> <releases> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> <checksumPolicy>warn</checksumPolicy> </releases> </repository> </repositories>
推荐阅读
-
Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包
-
详解使用Nginx和uWSGI配置Python的web项目的方法
-
使用React服务端渲染Next.js框架构建一个简单项目(实例)
-
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
-
使用Python FastAPI构建Web服务的实现
-
Docker使用 Maven 插件构建镜像的方法
-
使用Python的Flask框架构建大型Web应用程序的结构示例
-
初次使用IDEA创建maven项目的教程
-
新版本IntelliJ IDEA 构建maven,并用Maven创建一个web项目(图文教程)
-
Node.js使用Express创建Web项目详细教程