用maven构建的ear,如何管理idea maven依赖管理

博客分类:
(1)创建一个maven项目
mvn archetype:create
-DgroupId=org.sonatype.mavenbook.ch03
-DartifactId=simple
-DpackageName=org.sonatype.mavenbook
相关解释说明
mvn archetype:create
通过archetype插件快速创建一个项目
-Dname=value
这样的对是将会被传到目标中的参数,java用来设置系统属性的方式
artifactId
项目的基础目录(simple)
simple项目下的pom.xml文件 描述了项目,配置了插件,声明了依赖
src/main/java
java类文件
src/main/resources
classpath资源文件
src/test/java
测试java类文件
src/test/resources
测试classpath资源文件
(2)构建并打包项目(在包含pom.xml文件下运行)
mvn install
运行后在target目录下生成simple-1.0-SNAPSHOT.jar文件(名称根据pom.xml文件配置得来),
并安装到我们的本地maven仓库。
(3)maven的pom.xml文件说明:
&groupId&org.sonatype.maven.test&/groupId&
&artifactId&simple&/artifactId&
&version&1.0-SNAPSHOT&/version&
&packaging&jar&/packaging&
以上四个元素是maven的坐标,唯一标识了一个项目。
&name&simple&/name&
&url&http://maven.apache.org&/url&
以上二个元素是pom提供的描述性元素,给人提供可阅读的名字。
&dependencies&
&dependency&
&groupId&junit&/groupId&
&artifactId&junit&/artifactId&
&version&3.8.1&/version&
&scope&test&/scope&
&/dependency&
&/dependencies&
&dependencies&元素定义了项目的相关依赖,
&scope&元素为test,说明只有在运行compiler:testCompile和surefire:test时才会被加到classpath中。
&scope&元素如果为provided,则依赖在编译的时候需要,但是不应该被捆绑在构建的输出中。
在开发web应用时很有用。
maven支持传递性依赖,会隐式地把相关依赖间接依赖的包也加到项目中。
(4)验证程序是否工作(java -cp 指定类运行所依赖其他类的路径,多个依赖包用;隔开)
java -cp target/simple-1.0-SNAPSHOT.jar org.sonatype.maven.App
(5)-查看有效的(effective)pom,即maven真正运行根据的pom
mvn help:effective-pom (在项目的基础目录下simple运行)
(6)maven项目打包
mvn package 运行到打包为止的所有阶段,包含以下一系列插件目标
mvn resources:resources
compiler:compile
resources:testResources
compiler:testCompile
surefire:test
(7)浏览maven中央仓库
maven仓库的目录存储格式
&groupId& / &artifactId& / &version& / &artifactId&-&version&.&packaging&
(8)生成站点文档和报告
mvn site (生成文档目录在target/site目录下)
(9)查看相关依赖的groupId和artifactId
(搜索依赖可查看pom.xml文件中的依赖元素)
(10)浏览项目的相关依赖(打印出已解决依赖的列表)
1.mvn dependency:resolve(在项目目录下执行)
2.mvn dependency:tree
(浏览项目的整个依赖树,包含间接依赖)
(11)执行单元测试
1.忽略单元测试失败,需要设置Surefire的testFailureIgnore的属性为true
&groupId&org.apache.maven.plugins&/groupId&
&artifactId&maven-surefire-plugin&/artifactId&
&configuration&
&testFailureIgnore&true&testFailureIgnore&
&/configuration&
&/plugins&
2.跳过单元测试,需要设置Surefire的skip的属性为true
&groupId&org.apache.maven.plugins&/groupId&
&artifactId&maven-surefire-plugin&/artifactId&
&configuration&
&skip&true&/skip&
&/configuration&
&/plugins&
(12)创建Maven的Web应用(需指定archetypeArtifactId为maven-archetype-webapp,打包成war)
mvn archetype:create
-DgroupId=org.sonatype.mavenbook.ch05
-DartifactId=simple-webapp
-DpackageName=org.sonatype.mavenbook
-DarchetypeArtifactId=maven-archetype-webapp
打包的War文件默认名称为&artifactId&-&version&.war
如果定义了finalName,则包名为&finalName&.war.
如:&finalName&simple-webapp&/finalName&
(13)配置Maven Jetty插件
1.在pom.xml文件中配置
&finalName&simple-webapp&/finalName&
&groupId&org.mortbay.jetty&/groupId&
&artifactId&maven-jetty-plugin&/artifactId&
&/plugins&
2.启动Web项目(调用Jetty插件的run目标)
mvn jetty:run
启动完后就可以通过()访问。
(14)Pom相关
1.asm包(字节码操作)依赖包如果版本不一致,则项目会出问题。
2.所有的pom文件都从超级pom继承,超级pom存放于
{M2_HOME}\lib\maven-2.2.1-uber.jar\org\apache\maven\project
3.查看项目的有效POM,超级POM和项目POM的合并(打印出XML文档)
mvn help:effective-pom
4.版本号格式(例:1.3.5, 1.3-beta-01)
&主版本&.&次版本&.&增量版本&-&限定版本&
5.pom的属性引用(${})
例:${project.groupId}-${project.artifactId}
maven提供了三个隐式的变量
1.env 例:${env.PATH},暴露了操作系统,访问系统的环境变量
2.project 例:${project.groupId},暴露了POM,访问POM的信息。
3.settings 例:${settings.offline},暴露了Maven Settings的信息,
引用settings.xml文件中offline元素的值。
(15)项目依赖的依赖范围
1.compile(编译范围),默认的范围,在所有的classpath中可用,同时也会被打包。
2.provided(已提供范围),只有在容器提供该依赖后才可使用,在编译时可用,但不会被打包。(例:Servlet Api)
3.runtime(运行时范围),只有在运行和测试系统时需要,编译时不需要。(例:JDBC驱动)
4.test(测试范围),只有在测试编译和测试运行阶段可用,编译和运行时不需要。
5.system(系统范围),与provided类似,必须显示的提供一个对于本地系统中JAR文件的路径。不推荐使用。
6.使用依赖的多个版本
(,) 不包含量词
[,] 包含量词
例:&version&[3.8,4.0]&/version& 依赖于3.8-4.0之间的版本
&version&[,3.8.1]&/version& 依赖于&=3.8.1的版本
7排除传递性依赖(配置exclusions元素)
&dependency&
&groupId&log4j&/groupId&
&artifactId&log4j&/artifactId&
&version&1.2.16&/version&
&exclusions&
&exclusion&
&groupId&javax.mail&/groupId&
&artifactId&mail&/artifactId&
&/exclusion&
&exclusion&
&groupId&javax.jms&/groupId&
&artifactId&jms&/artifactId&
&/exclusion&
&/exclusions&
&/dependency&
8.统一依赖版本号
在子项目中引用依赖而不用显示的列出版本号(dependencyManagement元素),
版本升级时不用手工的一个个修改依赖的pom.xml文件。
&dependencyManagement&
&dependencies&
&dependency&
&groupId&mysql&/groupId&
&artifactId&mysql-connector-java&/artifactId&
&version&5.1.2&/version&
&/dependency&
&/dependencies&
&/dependencyManagement&
在子项目中引用依赖,不用指定版本号
&dependencies&
&dependency&
&groupId&mysql&/groupId&
&artifactId&mysql-connector-java&/artifactId&
&/dependency&
&/dependencies&
如果子项目中指定了版本,将覆盖顶层POM的dependencyManagement元素的版本号。
9.多模块项目管理
将很多项目归类在一起,成为一个构建,打包类型总是POM.
&module&sub-gooup-a&/module&
&module&sub-gooup-b&/module&
&/modules&
10.项目继承(当一个项目声明一个parent的时候,它从父项目的POM中继承信息)
&groupId&com.training.killerapp&/groupId&
&artifactId&a-parent&/artifactId&
&version&1.0-SNAPSHOT&/version&
(16).maven生命周期
(1)清理生命周期(删除整个构建目录,target目录)
(2)默认生命周期阶段
1.validate 验证项目是否正确
2.generate-sources 生成所有需要包含在编译过程中的源代码
3.process-sources 处理源代码,比如过滤一些值。
4.generate-resources 生成所有需要包含在打包过程中的资源文件
5.process-resources
复制并处理资源文件至目标目录,准备打包
6.compile 编译项目的源代码
7.process-classes 后处理编译生成的文件,例如对Java类进行字节码增强
8.generate-test-sources 生成所有包含在测试编译过程中的测试源码
9.process-test-sources 处理测试源码,比如过滤一些值
10.generate-test-resources 生成测试需要的资源文件
11.process-test-resources 复制并处理测试资源文件至测试目标目录
12.test-compile 编译测试源码至目标目录
13.test 使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布
14.prepare-package 在真正的打包之前,执行一些准备打包必要的操作。
这通常会产生一个包的展开的处理过的版本
15.package 将编译好的代码打包成可分发的格式 ,如JAR,WAR,或者EAR
16.pre-integration-test 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境
17.integration-test 如果有必要的话,处理包并发布至集成测试可以运行的环境
18.post-integration-test 执行一些在集成测试运行之后需要的动作。如清理集成测试环境
19.verify 执行所有检查,验证包是有效的,符合质量规范
20.install 安装包至本地仓库,以备本地的其它项目作为依赖使用
21.deploy 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)
(17).过滤资源,替换属性
默认的Maven行为会跳过过滤,只是将资源复制到输出目录。需显示地配置资源过滤
&filter&src/main/filters/default.properties&/filter&
&/filters&
&rosources&
&directory&src/main/resources&/directory&
&filtering&true&/filtering&
&/resources&
(18).使用Maven Profile覆盖Compiler插件配置
&profiles&
&id&production&/id&
&inherited&true&/inherited&
&groupId&org.apache.maven.plugins&/groupId&
&artifactId&maven-compiler-plugin&/artifactId&
&configuration&
&debug&false&/debug&
&optimize&true&/optimize&
&/configuration&
&/plugins&
&/profile&
&/profiles&
1.profiles通常是pom.xml中最后一个元素
2.每个profile必须要有一个id元素,通过传给Maven一个-P&profile_id&参数来调用profile.
3.一个profile元素可以包含很多其它元素,只要这些元素可以出现在pom.xml文件的project元素下。
4.mvn clean install -Pproduction -X (-X为开启调试输出)
(19).使用profile激活动态包含子模块
&profiles&
&id&jdk16&/id&
&activation&
&jdk&1.6&/jdk&
&/activation&
&module&simple-script&/module&
&/modules&
&/profile&
&/profiles&
1.如果在jdk1.6下运行,则会构建simple-script项目,否则不会构建。
2.activation元素列出了所有激活profile需要的条件。
其它方式:通过属性缺失激活(!表示否定,当没有设置${environment.type}属性时被激活.
&activation&
&property&
&name&!environment.type&/name&
&/property&
&/activation&
3.如果大量使用Maven Profile,可将profile从POM文件中分离,
使用一个单独文件,名字为profiles.xml,放到项目目录下(同pom.xml),格式为
&profiles&
&/profile&
&/profiles&
4.setting profile可以应用到所有使用到Maven构建的项目,可以在两个地方定义
(1).~/.m2/settings.xml(特定用户)
(2).${M2_HOME}/conf/settings.xml(全局)
5.列出活动的profile
mvn help:active-profiles
(20).创建私服
下载nexus()
解压后运行目录下\bin\jsw\windows-x86-32\Nexus.bat,
访问(默认admin,admin123)
1.配置maven settings
&id&Nexus&/id&
&mirrorOf&central&/mirrorOf&
&name&Nexus Public Mirror&/name&
&url&http://localhost:8081/nexus/content/groups/public&/url&
&/mirrors&
&profiles&
&id&artifactory&/id&
&repositories&
&repository&
&id&nexus&/id&
&name&local nexus&/name&
&url&http://localhost:8081/nexus/content/groups/public&/url&
&layout&default&/layout&
&/repository&
&/repositories&
&pluginRepositories&
&pluginRepository&
&id&nexus&/id&
&name&local nexus&/name&
&url&http://localhost:8081/nexus/content/groups/public&/url&
&layout&default&/layout&
&/pluginRepository&
&/pluginRepositories&
&/profile&
&/profiles&
&activeProfiles&
&activeProfile&artifactory&/activeProfile&
&/activeProfiles&
3. 或者在项目pom.xml中加入
&repositories&
&repository&
&id&nexus&/id&
&name&local nexus&/name&
&url&http://localhost:8081/nexus/content/groups/public&/url&
&/repository&
&/repositories&
&pluginRepositories&
&pluginRepository&
&id&nexus&/id&
&name&local nexus&/name&
&url&http://localhost:8081/nexus/content/groups/public&/url&
&/pluginRepository&
&/pluginRepositories&
配置后maven会从本地的nexus安装查阅(可在Public Repositories和Maven Central仓库中查到)
(21)部署第三方构件到nexus
在nexus项目管理中
找到Repositories,这里选择其中一个,例如3rd party,
可以在下面看到一个Artifact Upload选项卡。
打开在GAV Definition中选择GAV Parameters,在接下来的Group中选输入组织名,
Artifact项输入artifactId ,Packaging:这里选择jar,
之后上传一个自定义的jar文件,
点击Add Artifact,Upload Artifact(s),上传成功后,
在上边的3rd party上单击右键——ReIndex,然后刷新下这个列表,
就可以看到下边多了.index文件夹和我们刚才上传相关的文件夹。
浏览 10922
浏览: 507412 次
来自: 福建
用 pageoffice 吧. http://www.zhuo ...
很好,谢谢分享。
&c:if test=&${ReleaseRe ...
if(result != null && re ...
String printerIp = req.getRemot ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客分类:
Maven提供了多种依赖关系,这些依赖关系使用起来非常容易出错。这几天看到我们产品项目间的依赖关系使用相当混乱,所以花了几天时间研究了一把。
Maven提供多种项目依赖关系。
compile:这是缺省的依赖关系。不要被它的名字给迷惑了,它并不表示编译时依赖,而是所有都依赖。
provided:如果该库应用服务器提供了,就使用它。
test:只在单元测试使用。
还有其它几种,我觉得并不重要。
如果一个项目打包为Jar。那么根本不存在应用服务器这种情况,直接用缺省依赖关系compile即可。当然如果想更精细控制,向junit,hsqldb,mock这样的库一般可以作为test。
如果一个项目打包为war,ear。那么就应该把应用服务器提供的库给排除出去,即在该项目中添加这些库的依赖,依赖类型为provided。
下面是一个多项目产品的例子。
产品top-app。top-app包含下面4个项目,my-app,my-app2,my-app3,my-appwar。前面三个都是打成jar包。最后一个打成war包。所有子项目不能定义groupId,要不然可能会出错。
在top-app中定义产品测试用到的库,scope为test;定义应用服务器提供的库,scope为provided
具体定义如下
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"
com.mycompany.app
my-app3war
&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&top-app&/artifactId&
&version&1.0&/version&
&name&top-app&/name&
&packaging&pom&/packaging&
&module&my-app&/module&
&module&my-app2&/module&
&module&my-app3&/module&
&module&my-app3war&/module&
&/modules&
&dependencies&
&dependency&
&groupId&junit&/groupId&
&artifactId&junit&/artifactId&
&version&3.8.1&/version&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&log4j&/groupId&
&artifactId&log4j&/artifactId&
&version&1.2.9&/version&
&scope&provided&/scope&
&/dependency&
&/dependencies&
&/project&
my-app,my-app2,my-app3中只需要定义真正需要的。scope都为缺省即compile。如果项目单独添加了特别的测试用的库,那么加为test依赖,不过用compile也没有问题。
my-app2的pom.xml示例如下。
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"
com.mycompany.app
com.mycompany.app
&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&
&artifactId&my-app2&/artifactId&
&packaging&jar&/packaging&
&version&1.0&/version&
&name&my-app2&/name&
&groupId&com.mycompany.app&/groupId&
&artifactId&top-app&/artifactId&
&version&1.0&/version&
&dependencies&
&dependency&
&groupId&com.mycompany.app&/groupId&
&artifactId&my-app&/artifactId&
&version&1.0&/version&
&scope&compile&/scope&
&/dependency&
&/dependencies&
&/project&
my-appwar中也只需要定义真正需要的。scope也都为缺省即compile,因为在top-app中已经定义了应用服务器提供的库,打包的时候maven不会打进去。
示例代码见附件。
下载次数: 3
浏览: 7522 次
来自: 深圳
Plugin execution not covered by ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'maven中maven dependencies中依赖出现了项目
maven中maven dependencies中依赖出现了项目,把依赖的项目关掉,项目消失,但是还是无法打包 ,出现的错误如图。说明:依赖的项目为project-dao &打包的项目为project-service &都在project-parent中有依赖。project-dao是可以打包成功的。project-service中依赖dao的jar包也可以过来。
[INFO] Scanning for projects... [INFO] & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & && [INFO] ------------------------------------------------------------------------ [INFO] Building project-service 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.507s [INFO] Finished at: Thu May 22 09:45:55 CST 2014 [INFO] Final Memory: 4M/15M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal on project project-service: Could not resolve dependencies for project com.newhero.project:project-service:jar:0.0.1-SNAPSHOT: Failed to collect dependencies for [com.newhero.project:project-dao:jar:0.0.1-SNAPSHOT (compile?)]: Failed to read artifact descriptor for com.newhero.project:project-dao:jar:0.0.1-SNAPSHOT: Could not find artifact com.newhero.project:project-parent:pom:0.0.1-SNAPSHOT -& [Help 1] [ERROR]& [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR]& [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
我也碰到这个问题,需要把parent工程,也就是package是pom的那个工程先install一下。
--- 共有 13 条评论 ---
我的怎么和你们的问题差不多就是处理不到
: 就是外层工程执行mvn install
:江湖救急 求详细点的解释
卡了好几天了
:war为工程名?具体的cmd操作代码是怎么样的?
: 就是pom文件里面有&packaging&war&/packaging&这个标签,标签内容为pom的那个工程
good,一楼正解;要是不行的话可以试下mvn -X clean install,-X表示强制从远程库更新dependency;再不行可能就是远程仓库没有架包了。
刚刚遇到这个问题, 根据一楼的方法,果然成功了! &
thank you a lot!
引用来自“Hi徐敏”的评论 我也碰到这个问题,需要把parent工程,也就是package是pom的那个工程先install一下。
一楼给力!!!!!!
我是因为在version里版本号没有写对,导致缺失各种的包的,最后修改版本号就OK了。
引用来自“snow_it_bobo”的评论我的也是这样,请问你的解决了吗?
引用来自“snow_it_bobo”的评论引用来自“放丅”的评论我的也是这样,请问你的解决了吗?找到原因了,在maven的.m2.xml文件中正确的配置你jar包资源库的位置就好了
一楼正解。。。mvn install 可以解决问题。
还有就是不要用 install 插件的install 命令
http://stackoverflow.com/questions/6308162/maven-the-packaging-for-this-project-did-not-assign-a-file-to-the-build-artifac& &&以前做过的项目中,没有真正的使用过Maven,只知道其名声很大,其作用是用来管理jar 包的。最近一段时间在项目过程中使用Maven,用Maven构建的web项目,其项目结构只停留在了解阶段,没有深入的使用与理解,刚好最近看了一篇关于Maven的详解;就开始深入学习一下Maven的具体应用。
二.Maven的作用
在开发中,为了保证编译通过,我们会到处去寻找jar包,当编译通过了,运行的时候,却发现"ClassNotFoundException",我们想到的是,难道还差jar包?
每个Java项目的目录结构都没有一个统一的标准,配置文件到处都是,单元测试代码到底应该放在那里也没有一个权威的规范。
因此,我们就要用到Maven(使用Ant也可以,不过编写Ant的xml脚本比较麻烦)----一个项目管理工具。
Maven主要做了两件事:
统一开发规范与工具
统一管理jar包
& &&下面我们来对比一下,首先建立一个普通的Java工程,是这样的:
& &这个我们都很熟悉,src下建包写代码,那么配置文件放在哪里?单元测试代码放在哪里?没有一个统一标准,更多时候都是开发者的自由发挥,每个人有自己的风格,这并不十分适合团队协作。接下来,看一下使用maven构建一个普通Java项目之后的目录结构:
看到使用Maven构建的普通Java项目,对源代码、单元测试代码、资源乃至后续需要的文件都有专门的目录规划。
上面的最后有一个pom.xml,这是Maven的核心配置文件,pom称为Project Object Model(项目对象模型),它用于描述整个Maven项目,所以也称为Maven描述文件。
当然事情不会这么简单,接下来,继续进入Maven的世界吧。
打开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.xrq.withmaven&/groupId&
&artifactId&withmaven&/artifactId&
&version&0.0.1-SNAPSHOT&/version&
&/project&
因为这个配置文件是Maven的核心,因此有必要详细解读一下pom.xml,来先看一下上面的几个:
1、modelVersion
  指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0
2、groupId
  顾名思义,这个应该是公司名或是组织名。一般来说groupId是由三个部分组成,每个部分之间以"."分隔,第一部分是项目用途,比如用于商业的就是"com",用于非营利性组织的就  是"org";第二部分是公司名,比如"tengxun"、"baidu"、"alibaba";第三部分是你的项目名
3、artifactId
  可以认为是Maven构建的项目名,比如你的项目中有子项目,就可以使用"项目名-子项目名"的命名方式
4、version
  版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本。在Maven中很重要的一点是,groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标,这非常重要,我在使用和研究Maven的时候多次感受到了这点。
在上面的这些元素之外,还有一些元素,同样罗列一下:
1、packing
  项目打包的类型,可以使jar、war、rar、ear、pom,默认是jar
2、dependencies和dependency
  前者包含后者。前面说了,Maven的一个重要作用就是统一管理jar包,为了一个项目可以build或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些依赖就被称为dependency。
  说到这里,就有一个本地仓库和远程仓库的概念了。官方下载的本地仓库的配置在"%MAVEN_HOME%\conf\settings.xml"里面,找一下"localRepository"就可以了;MyEclipse默认的本地仓库的地址在"{user.home}/.m2/repository"路径下,同样找一下"localRepository"就可以找到MyEclipse默认的本地仓库了。
  本地仓库和远程仓库是这样的,Maven工程首先会从本地仓库中获取jar包,当无法获取指定jar包时,本地仓库会从远程仓库(中央仓库)中下载jar包,并放入本地仓库以备将来使用。
  举个例子,比方说我的项目中用到了MyBatis,那么可以这么配置:
&dependencies&
&dependency&
&groupId&org.mybatis&/groupId&
&artifactId&mybatis&/artifactId&
&version&3.2.5&/version&
&/dependency&
&/dependencies&
& & 之前有说过groupId、artifactId、version唯一标识一个Maven项目,有了这三个元素,我们就可以去远程仓库下载MyBatis3.2.5.jar到本地仓库了。回想我们之前的做法,如果要MyBatis的jar包,发现没有,然后去网上下载一个,需要另外的jar包,然后去网上下载一个,但是有了Maven,就方便多了,只需要配置jar包对应的dependency依赖,Maven会自动帮助我们去远程仓库中下载jar包到本地仓库中。
3、properties
  properties是用来定义一些配置属性的,例如project.build.sourceEncoding(项目构建源码编码方式),可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。
  build表示与构建相关的配置,比如build下有finalName,表示的就是最终构建之后的名称。
接着解释一下Maven的目录结构:
main目录下是项目的主要代码,test目录下存放测试相关的代码
编译输出后的代码会放在target目录下
src/main/java下存放Java代码,src/main/resources下存放配置文件
这里没有webapp,Web项目会有webapp目录,webapp下存放Web应用相关代码
pom.xml是Maven项目的配置文件
三.Maven环境配置
常用的开发工具Idea、MyEclipse里面都已经集成了Maven了,不过最好是从官网下一个配置到自己电脑里,开发工具里的可能有少许的Bug。
首先去Maven官网,下载Maven的包,地址为http://maven.apache.org/download.cgi,找到下面的部分,点击就可以下载了:
下载完解压,然后配置一下环境变量,和JDK的环境变量配置类似:
这样配置完就可以了,验证一下,windows+r打开命令窗口,输入"mvn --version",如果有下面的内容这表示Maven配置OK:
Maven入门使用常见问题
1、我从SVN上下载了一个以Maven构建的工程,下载完毕没有jar包怎么办?
从资源库上下载下来的Maven工程,是没有jar包的,此时可以这么做:
(1)删除Maven工程,但是删除的时候不要删除本地工程里面的Maven工程,只删除MyEclipse中的Maven工程
(2)右键Import-&Maven4MyEclipse-&Existing Maven Projects,导入你的Maven工程,此时MyEclipse在构建工程的时候,假如你的本地仓库中没有dependcy中的jar包,便会去远程仓库下载jar包到本地仓库中。你的工程导入完毕之后,Library应该是这样的:
2、重新下载Maven工程所依赖的jar包、导入jar包都需要触发Maven工程的build workspace,那么如何才能触发Maven工程的build workspace?
找到一个pom.xml,随便修改一下,加一个空格、减一个空格什么的,ctrl+s保存一下,便会触发Maven工程的build workspace了
3、本地仓库的目录结构是什么样子的?
groupId、artifactId、version确定一个唯一的Maven,比方说我有一个mybatis的dependcy:
&dependency&
&groupId&org.mybatis&/groupId&
&artifactId&mybatis&/artifactId&
&version&3.2.5&/version&
&/dependency&
那么mybatis的jar包应该在%Maven仓库地址%\org\mybatis\mybatis\3.2.5\这一路径下,看到了吧,先groupId,再mybatis,最后version,每个名字都是一个文件夹的名字
4、有些jar包在dependcy里面有配置,Import了Maven工程,下载完工程所依赖的jar包之后,发现本地仓库里面却没有,怎么办?
可能是原先下载jar包的时候出了什么问题,从artifactId目录开始删除以下的所有文件/文件夹,然后触发一次Maven工程的build workspace就可以了
5、本地仓库中确定已经有jar包了,工程里面却报错,说找不到jar包,该怎么办?
应该有很多解决办法,目前解决的一种办法是,MyEclipse-&Window-&Preferences-&搜索Maven-&User Settings,Update Settings和Reindex点一下就好了。另外,可以尝试一下把本地Maven仓库内的jar包删除一下,然后重新build workspace,可能也可以。
阅读(...) 评论()

我要回帖

更多关于 idea maven依赖管理 的文章

 

随机推荐