maven
groupId 域名倒写
artifactId 项目名
version X.X.X里程碑
比如:1.0.0-SNAPSHOT
第一个X 大版本有重大变革
第二个X 小版本 修复bug,增加功能
第三个X 更新
里程碑版本:
SNAPSHOT (快照,开发版)
alpha(内部测试)
beta(公开测试)
Release | RC (发布版)
GA(正常版本)
Maven conf/settings.xml修改
1.<localRepository>/path/to/local/repo</localRepository>
2.
<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
<mirror>
<id>nexus_aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
Maven目录结构:
pom.xml
src -- main -- java com.xxxx.demo.Hello
-- resources
-- test -- java
-- resources
执行命令:
1.编译java文件
mvn compile
2.执行main方法
mvn exec:java -Dexec.mainClass="com.xxxx.demo.Hello"
maven命令格式如下:
mvn [plugin-name]:[goal-name]
mvn -version 显示版本信息
mvn clean 清理项目生产的临时文件,一般是模块下的target目录
compile 编译源代码,一般编译模块下的src/main/java目录
package 项目打包工具会在模块下的target目录生成jar或war等文件
test 测试命令或执行src/test/java/下junit的测试用例.
install 将打包的jar/war文件复制到你的本地仓库中,供其他模块使用
deploy 将打包的文件发布到远程参考,提供其他人员进行下载依赖
site 生成项目相关信息的网站
eclipse:eclipse 将项目转化为Eclipse项目
dependency:true 打印出项目的整个依赖树
archetype:generate 创建Maven的普通java项目
tomcat7:run 在tomcat容器中运行web应用
jetty:run 调用Jetty 插件的 Run 目标在Jetty Servlet 容器中启动 web 应用
注意:运行maven命令的时候,首先需要定位到maven项目的目录,也就是项目的pom.xm1文件所在的目录。否则,必以通过参数来指定项目的目录,
-D 传入属性参数
mvn package -Dmaven.test.skip=true
-P 使用指定的Profile配置
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<env>prod</env>
</properties>
</profile>
</profiles>
<build>
<filters>
<filter>config/${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
... ...
</build>
profles 定义了各个环境的变量 id,filters中定义了变量配置文件的地址,其中地址中的环增变量就是上面
profile 中定义的值,resources 中是定义哪些目录下的文件会被配置文件中定义的变量替换
通过maven可以实现按不同环境进行打包部署,例如:
mvn package -Pdev -Dmaven.test.skip=true
表示打包本地环境,并跳过单元测试
<build> <finalName>Demo01</finalName> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.25</version> <configuration> <!-- 热部署,每10秒扫描一次 --> <scanIntervalSeconds>10</scanIntervalSeconds> <!-- 可指定当前项目的站点名 --> <contextPath>/demo01</contextPath> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>9090</port><!-- 设置启动的端口号 --> </connector> </connectors> </configuration> </plugin> <!-- 设置在plugins标签中 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8081</port> <path>/demo01</path> <uriEncoding>UTF-8</uriEncoding> <server>tomcat7</server> </configuration> </plugin> </plugins> </build>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
项目打包war
clean compile package -Pdev -Dmaven.test.skip=true
<!-- 对于项目资源文件的配置放在bui1d中--> <resources> <resource> <directory>src/main/resources/${env}</directory> </resource> <resource> <directory>src/main/iava</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> <include>**/*.tld</include> </inc1udes> <filtering>false</filtering> </resource> </resources>
传递性依赖
A-B-C(2.0版本)和A-D-C(1.0版本) 这 样存在传递性依赖
引入本地jar包
mvn install:install-file -Dfile=/path/to/example.jar -DgroupId=com.example -DartifactId=example -Dversion=1.0 -Dpackaging=jar
mvn install:install-file -Dfile=/path/to/example.jar //自动引入jar包