1.maven跳过llt编译命令:
mvn clean install -Dmaven.test.skip=true
2.maven项目中pom文件节点详解:
1)插件仓库的配置是根据pluginRepositories和pluginRepository节点元素进行配置,如下:
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Team Nexus Repository</name>
<url>http://localhost/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
2)依赖的配置是根据repositories和repository节点元素进行配置,如下:
<repositories>
<repository>
<id>nexus</id>
<name>Team Nexus Repository</name>
<url>http://localhost/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
3)mvn install 会将项目生成的构件安装到本地Maven仓库,
mvn deploy 用来将项目生成的构件分发到远程Maven仓库。
本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件。
我们需要配置POM的distributionManagement来指定Maven分发构件的位置,如:
<distributionManagement>
<repository>
<id>releases</id>
<name>releases</name>
<url>http://localhost/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>snapshots</name>
<url>http://localhost/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
Maven区别对待release版本的构件和snapshot版本的构件,snapshot为开发过程中的版本,实时,但不稳定,release版本则比较稳定。Maven会根据你项目的版本来判断将构件分发到哪个仓库。
一般来说,分发构件(如jar)到远程仓库需要认证,如果你没有配置任何认证信息,你往往会得到401错误。这个时候,如下在settings.xml中配置认证信息:
<settings>
...
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
...
</settings>
3.中央仓库
中央仓库即默认的远程仓库,maven在安装的时候,自带的就是中央仓库的配置。该配置文件在${M2_HOME}/lib/maven-2.0.10-uber.jar里定义,打开该文件能找到超级POM:\org\apache\maven\project\pom-4.0.0.xml ,它是所有Maven POM的父POM,所有Maven项目继承该配置。
如果要更改中央仓库,则需要修改setting.xml,比如:
<mirrors>
...
<mirror>
<id>nexus-osc</id>
<mirrorOf>central</mirrorOf>
<name>Nexus osc</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
...
</mirrors>
这里<mirrorOf>的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像(用户也可以使用同样的方法配置其他仓库的镜像)
注:私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。
4.默认打包生成的jar是不能够直接运行main方法的,因为带有main方法的类信息不会添加到manifest中(我们可以打开jar文件中的META-INF/MANIFEST.MF文件,将无法看到Main-Class一行)。为了生成可执行的jar文件,我们需要借助spring-boot-maven-plugin插件,配置该插件如下:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.3.3.RELEASE</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <transformers> <transformer> <mainClass>com.mycom.myapp.HelloMaven</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
项目在打包时会将该信息放到MANIFEST中。现在执行mvn clean install,待构建完成之后打开target/目录,可以看到hello-maven-1.0-SNAPSHOT.jar和original-hello- maven-1.0-SNAPSHOT.jar,前者是带有Main-Class信息的可执行jar,后者是原始的jar,打开hello- maven-1.0-SNAPSHOT.jar的META-INF/MANIFEST.MF,可以看到它包含这样一行信息:
Main-Class:com.mycom.myapp.HelloMaven
现在,在项目根目录中执行该jar文件:D:\code\hello-world > java-jar target\hello-maven-1.0-SNAPSHOT.jar,可以得到正确的输出了。