maven打war包_Maven入门3

添加依赖(dependencies)

构建(编译、测试、运行)所需的依赖都在dependencies元素里添加,比如:

  junit      junit      4.11test

对每个依赖需要配置groupId、artifactId、version、scope。前三个好理解,每个工件都会有。

scope指的是如何使用这个依赖,其值有:compile、test、runtime等。

Maven在构建项目的时候会自动引用这些依赖,先从本地仓库(默认是在${user.home}/.m2/repository这个目录)找。

当本地仓库没有时,Maven会从远程仓库中下载到本次仓库。

默认的远程仓库地址是:https://repo.maven.apache.org/maven2/

当然,我们也可以搭建自己的远程仓库。

假设我们需要引用log4j这个依赖,那么它的groupId、artifactId、version是什么呢?

我们可以到Maven的中央仓库https://repo.maven.apache.org/maven2/log4j/log4j/这个目录下,会有一个maven-metadata.xml文件和对应每个版本的目录。

maven-metadata.xml文件的内容类似:

log4jlog4j1.2.171.2.171.1.31.2.41.2.51.2.61.2.71.2.81.2.91.2.111.2.121.2.131.2.141.2.151.2.161.2.1720140318154402

从这里我们可以得知log4j的groupId、artifactId,version则根据我们的需要来选择,比如,我们选择1.2.17这个版本:

  junit      junit      4.11testlog4j      log4j      1.2.17compile

注意,scope设置的是compile,现在我们执行mvn compile,Maven就会自动下载这个依赖到本地仓库。

将JAR包部署到远程仓库

首先,需要在Maven的配置文件中配置我们的远程仓库的用户认证信息:

  ...  mycompany-repositoryjvanzyl/path/to/identitymy_key_passphrase  ...

然后,需要在项目的POM文件中配置远程仓库的地址:

4.0.0com.mycompany.app  my-app  1.0-SNAPSHOTjar  ...  mycompany-repositoryMyCompany Repositoryscp://repository.mycompany.com/repository/maven2

创建项目站点/文档

使用archetype机制:

mvn archetype:generate   -DarchetypeGroupId=org.apache.maven.archetypes   -DarchetypeArtifactId=maven-archetype-site   -DgroupId=com.mycompany.app   -DartifactId=my-app-site

构建其他类型的项目

比如web项目。

项目的生命周期对所有类型的项目都适用,所以,可以使用archetype机制来创建web项目:

mvn archetype:generate     -DarchetypeGroupId=org.apache.maven.archetypes     -DarchetypeArtifactId=maven-archetype-webapp     -DgroupId=com.mycompany.app     -DartifactId=my-webapp

此时,生成的项目POM文件如下:

4.0.0com.mycompany.app  my-webapp  1.0-SNAPSHOTwarjunit      junit      4.11testmy-webapp

packaging元素的值是war,表示要打成WAR包。

我们同样是执行:

mvn package

进行打包。

如何一次构建多个项目?

首先要在多个项目的上级目录创建一个POM文件,以上面的my-app和my-webapp为例:

3ebc67dcd3d41d163000961d1addaa3c.png

这个POM文件可以称为:父POM,它的内容是:

4.0.0com.mycompany.app  app  1.0-SNAPSHOTpommy-appmy-webapp

父POM也有groupId、artifactId、version、packaging元素,只不过packaging元素的值是pom

还有modules元素,其值包含了my-app和my-webapp这两个工件,这表示该父POM有两个子模块

这样定义是告诉Maven在所有子模块集合上执行命令,而不是只在当前Maven项目上执行命令。但是也可以使用--non-recursive选项取消。

然后,假设my-webapp需要依赖my-app,所以需要在其POM文件中添加依赖:

  ...  com.mycompany.app      my-app      1.0-SNAPSHOT    ...  

这样会确保JAR包先于WAR包构建,然后打包的时候指示WAR插件将JAR包包含在WAR的库目录中。

最后,my-app和my-webapp这两个工件的POM文件都需要指定父POM:

  com.mycompany.app    app    1.0-SNAPSHOT

因为模块和父项目可能是分开分发(distribute)的,这样通过在仓库始终可以找到父POM。

现在,在父POM这一级目录下执行:

mvn verify

会看到对两个项目均执行了编译、打包等操作,当然,被依赖的肯定先编译和打包。

最终生成的是WAR包:my-webapp/target/my-webapp.war

然后,查看WAR包的内容:jar tvf my-webapp/target/my-webapp-1.0-SNAPSHOT.war

23dc6a47b0c71dc96dfd6f96a0f04bea.png

可以看到WAR包中包含了my-app-1.0-SNAPSHOT.jar这个JAR包。

注意,我们的项目也依赖于junit,不过此依赖仅仅在测试时有效,所以打包不会包含junit的JAR包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值