maven配置详解 compile (编译范围)
compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath 中可用,同时它们也会被打包。
provided (已提供范围)
provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。例如, 如果你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。
runtime (运行时范围)
runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC
驱动实现。
test (测试范围)
test范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
system (系统范围)
system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven 也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个 systemPath 元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的 Maven 仓库中引用依赖)。
常用mavan命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 mvn dependency:sources mvn dependency:resolve -Dclassifier=javadoc mvn dependency:sources -DincludeArtifactIds=guava mvn clean packget -U -f pom.xml -Dmaven.test.skip 安装本地包source : mvn install:install-file -Dgroup Id=com.xxx -DartifactId=xxx -Dversion=0.11 -Dpackaging=jar -Dfile=xx.jar -DgeneratePom=true -Dclassifier=sources -Dclassifier=javadoc mvn clean source:jar install -Dmaven.test.skip =true mvn install:install-file -Dfile=xxx.jar -Dgroup Id=com.xxx.xxx -DartifactId=xxx -Dversion=xxx -DcreateChecksum=true -Dpacking=jar -DgeneratePom=true [-Dclassifer=binary] mvn install:install-file -Dfile=xx.jar -DpomFile=/path/to /java-memcached-2.6 .2 .pom mvn eclipse:eclipse引入源码jar, 在 <plugin> <groupId> org.apache.plugins</groupId> <artifactId> maven-eclipse-plugin</artifactId> <configuration> </configuration>
Maven在仓库中的存储路径 = groupId + artifactId + version + classifier + extension(packaging)
Maven 仓库的分类: maven的仓库只有两大类:1.本地仓库 2.远程仓库,在远程仓库中又分成了3种:2.1 中央仓库 2.2 私服 2.3 其它公共库 所有的maven项目都会继承超级pom,具体的说,包含了下面配置的pom我们就称之为超级pom [html] view plaincopy
central Central Repository http://repo.maven.apache.org/maven2 default false 三、远程仓库配置 配置远程仓库将引入新的配置元素: 在元素下,可以使用 子元素声明一个或者多个远程仓库。
1 <project>
<!-- 配置私服地址 -->
<repositories>
<repository>
<id>nexus</id>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<snapshots><enabled>true</enabled></snapshots>
<releases>
<updatePolicy>daily</updatePolicy><!-- never,always,interval n -->
<enabled>true</enabled>
<checksumPolicy>warn</checksumPolicy><!-- fail,ignore -->
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<snapshots><enabled>true</enabled></snapshots>
<releases><enabled>true</enabled></releases>
</pluginRepository>
</pluginRepositories>
<project>
···
<updatePolicy>元素:表示更新的频率,值有:never, always,interval,daily, daily 为默认值
<checksumPolicy>元素:表示maven检查和检验文件的策略,warn为默认值
认证信息配置在settings.xml中:
same with repository id in pom 这里的id必须与POM中需要认证的repository元素的Id一致 username pwd
<?xml version=”1.0” encoding=”UTF-8” standalone=”no”?>
deployment deployment deployment123 mvn release:clean -P release mvn release:prepare -P release mvn release:prepare release:perform mvn clean deploy1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ### 正确的看待快照 之前我们在配置pom的时候,对于快照的配置都很谨慎,或者说很少用快照的版本,原因是它还很不稳定,极容易给我们的系统带来未知的错误,让我们很难查找。其实快照版本也并不是一无是处,快照最大的用途是用在开发的过程中,尤其是有模块依赖的时候,比如说AB两个模块同时开发,A依赖于B,开发过程中AB都是持续集成的开发,不断的修改POM文件和构建工程,这时候版本同步就成了一个很大的问题。使用快照就可以达到这一目的。 其实在快照版本在发布的过程中,Maven会自动为构件以当前时间戳做标记,有了这个时间戳,我们就可以随时找到最新的快照版本,这样也就解决刚才说的 协作开发的问题。 至于A如何检查B的更新,刚刚在讲配置的时候说过,快照配置中有一个元素可以控制检查更新的频率 我们也可以使用命令行加参数的形式强制执行让maven检查更新: mvn clean install -U### maven从仓库解析依赖的机制 1. 当依赖的范围是system 的时候,Maven直接从本地文件系统解析构件2. 根据依赖坐标计算仓库路径后,尝试直接从本地仓库寻找构件,如果发现相应构件,则解析成功3. 在本地仓库不存在相应的构件情况下,如果依赖的版本是显示的发布版本构件,则遍历所有的远程仓库,发现后下载使用4. 如果依赖的版本是RELEASE 或LATEST, 则基于更新策略读取所有远程仓库的元数据,将其于本地仓库的对应元数据合并后,计算出RELEASE 或者LATEST的真实值,然后基于这个真实值检查本地仓库5. 如果依赖的版本是SNAPSHOT , 则基于更新策略读取所有远程仓库的元数据, 将其与本地仓库的对应元数据合并后,得到最新快照版本的值,然后基于该值检查本地仓库或从远程仓库下载6. 如果最后解析到的构件版本是时间戳格式的快照,则复制其时间戳格式的文件 至 非时间戳格式,并使用该非时间戳格式的构件注:一定要记得<release > <enabled> & <snapshot > <enabled> ,对于快照也是一样 在POM的依赖声明的时候不推荐使用LATEST & RELEASE , 在Maven3中也不再支持在插件配置中使用LATEST & RELEASE , 如果不设置插件版本,那么最终版本和release 一样, maven只会解析最新的发布版本构建。 ### maven plugins: 1. jar plugins
org.apache.maven.plugins maven-jar-plugin **/log4j.properties true xxxx.testing dependency-jars/ ```
shade plugin:
参考:http://psy-lob-saw.blogspot.com/2013/01/java-print-assembly.html http://www.chrisnewland.com/images/jitwatch/HotSpot_Profiling_Using_JITWatch.pdf https://dzone.com/articles/java-multi-threading-volatile-variables-happens-be-1 http://qifuguang.me/2015/09/02/%5BJava并发包学习七%5D解密ThreadLocal/ https://blog.codecentric.de/en/2014/01/useful-jvm-flags-part-8-gc-logging/ https://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html http://psy-lob-saw.blogspot.jp/2013/05/using-jmh-to-benchmark-multi-threaded.html http://iissnan.com/progit/html/zh/ch9_2.html https://marklodato.github.io/visual-git-guide/index-zh-cn.html https://marklodato.github.io/visual-git-guide/index-zh-cn.html http://www.lxway.com/45419456.htm http://github.com/javaee-samples/javaee7-simple-sample