maven .

快速创建 一个普通java 项目


mvn archetype:generate -DgroupId=org.jixiuf -DartifactId=drp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false


快 转成eclipse 项目

mvn eclipse:eclipse




Build the Project

mvn package


maven 的生命周期



http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html



validate






- validate the project is correct and all necessary information is availabl
  • compile - compile the source code of the project
  • test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
  • package - take the compiled code and package it in its distributable format, such as a JAR.
  • integration-test - process and deploy the package if necessary into an environment where integration tests can be run
  • verify - run any checks to verify the package is valid and meets quality criteria
  • install - install the package into the local repository, for use as a dependency in other projects locally
  • deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects

 

mvn clean dependency:copy-dependencies package

先清target       再copy 依赖的jar 到target/dep*  然后打包

mvn site 生成 站点 各种plugins
http://maven.apache.org/plugins/

<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.mycompany.app</groupId> <artifactId>my-app</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>my-app</name> <url>http://maven.apache.org</url> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.5</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> 

${basedir}/src/main/resources 目录下的文件 会被 打到jar中

===============================================================================

filter 过滤(其实是变量的引用与替换) ${<property name>} .

要使用filter需要修改pom.xml

<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>Maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering </resource> </resources> </build> </project>
显式的加入指定 资源文件的位置src/main/resources目录(这个是默认,但是因为 <filtering>true</filtering>不是默认,所以要加到pom中


1要想引用pom.xml 文件
中的值,如pom的版本${project.version} ,另外project可以用pom 替换,即可写成${pom.version} # application.properties application.name=${pom.name} application.version=${pom.version}

2另外引用settings.conf

中的 ,例:${settings.localRepository}

3引用其他自定义的文件 中的属性
<build> <filters> 这个文件 中定义了一些属性,想在src/main/resources/中的文件 动态引用filter.properties 中的属性 <filter>src/main/filters/filter.properties</filter> </filters> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> # filter.properties my.filter.value=hello! # application.propertie application.name=${pom.name} application.version=${pom.version} message=${my.filter.value}



上面是将





my.filter.value=hello! 写到# filter.properties文件 中,也可以

<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> <properties> <my.filter.value>hello</my.filter.value> </properties>

4 引用 system properties # application.properties java.version=${java.version} cmmand.line.prop=${command.line.prop}
传递参数


mvn process-resources "-Dcommand.line.prop=hello again"


==============================================================================

How do I use external dependencies?

定义外部依赖http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

http://hi.baidu.com/zengzhf/blog/item/a2187f2294ed544293580777.html scope

: groupId, artifactId, version, and scope

scope :compile , test , and runtime . 要添加log4j 的外部依赖(如何知道要用哪个版本 ) google :"site:www.ibiblio.org maven2 log4j"


会有个文件 maven-metadata.xml

创建web

mvn archetype:create / -DarchetypeGroupId=org.apache.maven.archetypes

-DarchetypeArtifactId=maven-archetype-webapp /
-DgroupId=com.mycompany.app /

-DartifactId=my-webapp
一次build 多个项目

How do I build more than one project at once?

 

一种是parent 中用modules 指定子 project  Project Inheritance项目继承

一种是child 中用<parent>     Project Aggregation 

一种是兼用上面两种

它的作用可以将几个project 公同的部分,放在parent 中进行配置 ,则子 会继承parnet 中配置的信息

http://maven.apache.org/guides/introduction/introduction-to-the-pom.htm
http://www.duduwolf.com/wiki/2008/763.htm

<project xmlns="http://maven.apache.org/POM/4.0. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <version>1.0-SNAPSHOT</version> <artifactId>app</artifactId> <packaging>pom</packaging> <modules> <module>my-app</module> <module>my-webapp</module </modules> </project>

子模块要加入
<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/xsd/maven-4.0.0.xsd"> <parent> <groupId>com.mycompany.app</groupId> <artifactId>app</artifactId> <version>1.0-SNAPSHOT</version> </parent>


pom http://maven.apache.org/guides/introduction/introduction-to-the-pom.html
依赖的管理
http://tech.ddvip.com/2009-01/1232163892106138.html kh 中文
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

Maven中的profile


是一组可选的配置,可以用来设置或者覆盖配置默认值。有了profile,你就可以为不同的环境定制构建。profile可
以在pom.xml

中配置,并给定一个id。然后你就可以在运行Maven的时候使用的命
令行标记告诉Maven运行特定profile中的目标。以下
例子
http://www.sonatype.com/books/maven-book/reference_zh/ch11s02.html

http://www.sonatype.com/books/maven-book/reference_zh/ch11s03.html

参考资料
http://www.sonatype.com/books/maven-book/reference_zh/public-book.html

关于neuxs
http://www.blogjava.net/jianyue/articles/maven2_setting.html 一篇简介settings 设置的文章
<settings> <mirrors> <mirror> <!--This is used to direct the public snapshots repo in the 这里定义了一个从 http://localhost:8081/nexus/content/groups/public-snapshots 下载jar 的镜像,它有一个唯一 的id ,在repository中可以指向这个id,表示这哪个镜像下载 profile below over to a different nexus group --> <id>nexus-public-snapshots</id> <mirrorOf>public-snapshots</mirrorOf> <url>http://localhost:8081/nexus/content/groups/public-snapshots</url> </mirror> <mirror> <!--This sends everything else to 这个* 表示除了 public-snapshots 之外的所有镜像都从这个镜像下载(你访问一个url 如是http://localhost:8081/nexus/content/groups/public-snapshots ,则从>http://localhost:8081/nexus/content/groups/public 下载,),但是如果这个镜像并不是所有的其他站点的东西都可以下载,只有那些加入到其中的才可以,这样就导致无法下载某些jar 一般不将其配成* 而是配置成central 表示只有中央仓库的东西从这里下载,其他的不管 --> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://localhost:8081/nexus/content/groups/public</url> </mirror> </mirrors> <profiles> <profile> <id>development</id> <repositories> <repository> <!-- 看到这里的central--> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> <profile> <!--this profile will allow snapshots to be searched when activated--> <id>public-snapshots</id> <repositories> <repository> <id>public-snapshots</id> <url>http://public-snapshots</url> <releases><enabled>false</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>public-snapshots</id> <url>http://public-snapshots</url> <releases><enabled>false</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>development</activeProfile> </activeProfiles> </settings>
如果你的地理位置附近有一个速度更快的central镜像,或者你想覆盖central仓库配置,或者你想为所有POM使用唯一的一个远程仓库(这个远程
仓库代理的所有必要的其它仓库),你可以使用settings.xml中的mirror配置。
注意mirror 指定一个镜像 ,
=-----------------------------------------------------------------------------------------------------------------------------------------------------------

Repositories http://maven.apache.org/guides/introduction/introduction-to-repositories.html 定义内部repos,指定远程站点

本地仓库 vs. 远程仓库

运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后 再使用本地仓库的构件。

在POM中配置远程仓库

前面我们看到超级POM配置了ID为central的远程仓库,我们可以在POM中配置其它的远程仓库。这样做的原因有很多,比如你有一个局域网的 远程仓库,使用该仓库能大大提高下载速度,继而提高构建速度,也有可能你依赖的一个jar在central中找不到,它只存在于某个特定的公共仓库,这样 你也不得不添加那个远程仓库的配置。

这里我配置一个远程仓库指向中央仓库的中国镜像:

1. <project> 2. ... 3. <repositories> 4. <repository> 5. <id>maven-net-cn</id> 6. <name>Maven China Mirror</name> 7. <url>http://maven.net.cn/content/groups/public/</url> 8. <releases> 9. <enabled>true</enabled> 10. </releases> 11. <snapshots> 12. <enabled>false</enabled> 13. </snapshots> 14. </repository> 15. </repositories> 16. <pluginRepositories> 17. <pluginRepository> 18. <id>maven-net-cn</id> 19. <name>Maven China Mirror</name> 20. <url>http://maven.net.cn/content/groups/public/</url> 21. <releases> 22. <enabled>true</enabled> 23. </releases> 24. <snapshots> 25. <enabled>false</enabled> 26. </snapshots> 27. </pluginRepository> 28. </pluginRepositories> 29. ... 30. </project>

先看一下<repositories>的配置,你可以在它下面添加多个<repository>
,每个<repository>都有它唯一的ID,一个描述性的name,以及最重要的,远程仓库的url。此
外,<releases><enabled>true</enabled></releases>告诉
Maven可以从这个仓库下载releases版本的构件,
而<snapshots><enabled>false</enabled></snapshots>
告诉Maven不要从这个仓库下载snapshot版本的构件。禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定,且不受你控
制,你应该避免使用。当然,如果你想使用局域网内组织内部的仓库,你可以激活snapshot的支持。

关于<repositories>的更详细的配置及相关解释,请参考:http://www.sonatype.com/books /maven-book/reference_zh/apas02s08.html。

至于<pluginRepositories>,这是配置Maven从什么地方下载插件构件, <repositories> 是指定dependency 从哪里下载的地方 Maven的所有实际行为都由其插件完 成)。该元素的内部配置和<repository>完全一样,不再解释。

 

在pom.xml 中指定repository 可能会导致 重复,(多个项目都 可能要这样配置)可移到setting.xml 中,但是

 不过事情没有那么简单,不是简单的将POM中的<repositories> 及<pluginRepositories>元素复 制到settings.xml中就可以,setting.xml不直接支持 这两个元素。但我们还是有一个并不复杂的解决方案,就是利用profile,如下:

  1. # <settings> # ... # <profiles> # <profile> # <id>dev</id> # # <repositories> # 。。。。。。。。。。。。。。。。。。。。。。。 # </repositories> # </profile> # </profiles> # <activeProfiles> # <activeProfile>dev</activeProfile> # </activeProfiles> # ... # </settings> 
  2. 这里我们定义一个id为dev的profile,将所有 repositories以及pluginRepositories元素放到这个 profile 中,然后,使用<activeProfiles>元素自动激活该profile 。这样,你就不用再为每个POM重复配置仓库。


关于deploy

分发构件至远程仓库

aven区别对待release版本的构件和snapshot版本的构件,snapshot为开发过程中的版本,实时,但不稳定,release版 本则比较稳定。Maven会根据你项目的版本来判断将构件分发到哪个仓库。

一般来说,分发构件到远程仓库需要认证,如果你没有配置任何认证信息,你往往会得到401错误。这个时候,如下在settings.xml中配置认 证信息:

需要注意的是,settings.xml中server元素下id的值必须与POM中repository或snapshotRepository 下id 的值完全一致。 将认证信息放到settings下而非POM中,是因为POM往往是它人可见的,而settings.xml是本地的。

http://juvenshun.javaeye.com/blog/359256

1. <settings> 3. <servers> 4. <server> 5. <id>nexus-releases</id> 6. <username>admin</username> 7. <password>admin123</password> 8. </server> 9. <server> 10. <id>nexus-snapshots</id> 11. <username>admin</username> 12. <password>admin123</password> 13. </server> 14. </servers> 15. 16. </settings> # <project> # ... # <distributionManagement> # <repository> # <id>nexus-releases</id> # <name>Nexus Release Repository</name> # <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url> # </repository> # <snapshotRepository> # <id>nexus-snapshots</id> # <name>Nexus Snapshot Repository</name> # <url>http://127.0.0.1:8080/nexus/content/repositories/snapshots/</url> # </snapshotRepository> # </distributionManagement> # ... # </project>

 

 

 

 

  手动发布一个从别处下载的jar
你将需要发布Oracle JDBC构件至你的Nexus third-party仓库。为此,从http://
www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html下载Oracle
JDBC驱动,然后保存至文件ojdbc.jar。使用以下命令发布该文件至Nexus:

 

  mvn deploy:deploy-file -DgroupId=com.oracle -DartifactId=ojdbc14 /
> -Dversion=10.2.0.3.0 -Dpackaging=jar -Dfile=ojdbc.jar /
> -Durl=http://localhost:8081/nexus/content/repositories/thirdparty /
> -DrepositoryId=thirdparty





一个查询jar 的groupId archfectId 的网站


http://mvnrepository.com

你可能感兴趣的:(maven,properties,jar,Build,resources,dependencies)