目录[隐藏] |
maven库的结构
maven使用 FAQ
使用m2eclipse插件时,不能下载jar包的源代码
- 出现这种情况一般是因为m2eclipse插件的问题,所以我们可以直接用mvn命令来下载
- 在项目中的maven-command-build文件中,添加以下代码
<!-- 下载所有jar包的源代码 --> <target name="download-sources"> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" dependency:sources -Dsilent=true -DdownloadSources=true" /> </exec> </target>
然后执行刚新增的ant任务(该任务可能在某一些项目中已经存在,如存在直接执行即可),再在eclipse下项目右键 -> maven -> udpate dependencies 就可以将刚刚下载的源代码在eclipse中与jar关联
snapshot代表什么意思,与普通的maven项目有什么不同
Maven版本可以包含一个字符串字面量来表示项目正处于活动的开发状态。如果一个版本包含字符串“SNAPSHOT”,Maven就会在安装或发布这个组件的时候将该符号展开为一个日期和时间值,转换为UTC(协调世界时)。例如,如果你的项目有个版本为“1.0-SNAPSHOT”并且你将这个项目的构件部署到了一个Maven仓库,如果你在UTC2008年2月7号下午11:08部署了这个版本,Maven就会将这个版本展开成“1.0-20080207-230803-1”。换句话说,当你发布一个snapshot,你没有发布一个软件模块,你只是发布了一个特定时间的快照版本。
那么为什么要使用这种方式呢?SNAPSHOT版本在项目活动的开发过程中使用。如果你的项目依赖的一个组件正处于开发过程中,你可以依赖于一个 SNAPSHOT版本,在你运行构建的时候Maven会定期的从仓库下载最新的snapshot。类似的,如果你系统的下一个发布版本是“1.4”你的项目需要拥有一个“1.4-SNAPSHOT”的版本,之后它被正式发布。
maven项目怎么在eclipse下查看jar包的源文件
- 注意:不是所有的jar包都能下载源代码.必须要把源代码上传到maven服务器上的才能下载源代码.
怎么去更新snapshots(快照)的最新jar包
创建maven项目
新建maven项目
- JRE 选择 JavaSE-1.6
- Group Id 为com.ylink,请不要改变
- Artifact id 一般为你工程名,默认即可(如jfastshop,jfs-framework,gjj, 等等)
- Version 为2.0-SNAPSHOT,根据实际情况可改动
- Packaging 为你打包的类型 组件为jar,如果是web项目选择war
- Name和Description 可以不写
- 第三步:在src下建Floder包main/java,main/webapp
- 如图:
- 第四步:选中java右键>>Build Path>>Use as Source Folder
- 如图:
- 说明:选定资源文件夹
- 第五步:拷贝maven-command-build.xml和package-resources.build.xml到工程下面
配置maven相关项
配置pom.xml
<modelVersion>4.0.0</modelVersion> <groupId>com.ylink</groupId> <artifactId>gjj-report</artifactId> <version>2.0-SNAPSHOT</version> <packaging>jar</packaging> <!--指定parent位置--> <parent> <artifactId>parent</artifactId> <groupId>com.ylink</groupId> <version>2.0-SNAPSHOT</version> </parent> <repositories> <repository> <id>jfs_server</id> <url> http://172.168.8.191:8081/nexus/content/groups/public/ </url> </repository> </repositories> <!--需要引入的资源--> <dependencies> <dependency> <groupId>com.ylink</groupId> <artifactId>jfastshop</artifactId> <version>3.1-SNAPSHOT</version> <type>jar</type> <scope>compile</scope> </dependency> </dependencies> <build> <!-- 将资源文件设置在java目录下,不在resources目录下. --> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>*.tld</include> <include>*.zip</include> <include>**/*.ftl</include> </includes> <excludes> <exclude>*.java</exclude> </excludes> </resource> </resources> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- start of run ant --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.2</version> <executions> <!-- 打包前将指定目录压缩成一个zip文件 --> <execution> <id>compress</id> <phase>process-resources</phase> <configuration> <tasks> <!--指定package-resources.build.xml--> <ant antfile="./package-resources.build.xml" /> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> <!-- 打包后删除刚压缩的zip文件 --> <execution> <id>clean</id> <phase>package</phase> <configuration> <tasks> <!--指定package-resources.build.xml--> <ant antfile="./package-resources.build.xml" target="clean" /> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> <!-- end of run ant --> <!-- 打包的时候同时打包源代码.如果是deploy也同时打包并上传 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <configuration> <aggregate>false</aggregate> </configuration> <executions> <execution> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <!-- findBugs 插件 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plugin</artifactId> <version>2.0.1</version> <configuration> <findbugsXmlOutput>true</findbugsXmlOutput> <findbugsXmlWithMessages>true</findbugsXmlWithMessages> <xmlOutput>true</xmlOutput> </configuration> </plugin> </plugins> <!-- <outputDirectory>target/classes</outputDirectory>--> </build>
配置配置package-resources.build.xml
- 把下面*****部分的名字改为你对应工程的名字,下面以gjj-test为例
<project name="" default="compress-resouces" basedir="."> <property file="p.properties"> </property> <path id="svnant.class.path"> <fileset dir="./tools/svnant"> <include name="*.jar" /> </fileset> </path> <!-- 打包时的资源目录,copy到该目录会自动打包到jar包中 --> <property name="compress.dir.root" value="target/classes/resources" /> *****<!-- 压缩文件名 --> <property name="compress.file.name" value="test.zip" /> *****<!-- 压缩后copy到的目标目录 --> <property name="compress.file.path" value="${compress.dir.root}/test.zip" /> *****<!-- 压缩的目标目录(就是用该目录进行不包,该目录下的文件将打包在zip文件中) --> <property name="resources.dir" value="src/main/webapp/gjj-test" /> *****<!-- 组件的描述文件路径 --> <property name="metaDataRes" value="target/classes/resources/com.ylink.gjjtest.properties" /> <target name="clean"> <echo message="删除压缩文件" /> <delete dir="target/classes/resources" /> </target> <target name="init" depends="clean"> <echo message="初始化目录" /> <!-- 创建父目录 --> <mkdir dir="${compress.dir.root}/" /> <mkdir dir="target/classes/resources" /> <tstamp> <format pattern="yyyyMMddHHmmss" property="NOW" /> </tstamp> ***** <delete file="target/classes/resources/com.ylink.gjjtest.properties" /> <touch file="target/classes/resources/com.ylink.gjjtest.properties" /> <echo file="target/classes/resources/com.ylink.gjjtest.properties" message="deployTime=${NOW}" append="true" /> </target> <target name="compress-resouces" depends="init"> <echo message="将资源文件打包到一个压缩文件中,文件为[${compress.file.path}],资源[${resources.dir}]" /> ***** <zip destfile="${compress.dir.root}/gjjtest.zip"> <fileset dir="${resources.dir}"> <include name="**/*.*" /> <exclude name=".svn" /> </fileset> </zip> </target>
配置配置maven-command-build.xml
<project basedir="." default="help" name="gjj-report"> <property environment="env" /> <!-- maven2的根目录 --> <property name="maven.home" value="${env.MAVEN_HOME}" /> <!--运行时所有的jar包存放的目录 --> <property name="dir.runtime-lib" value="target\runtime-lib" /> <!--测试时或中间件所有的jar包存放的目录 --> <property name="dir.lib" value="target\lib" /> <!-- 打包 --> <target name="mvn.package"> <echo message="打包" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" -U package -Dmaven.test.skip=true" /> </exec> </target> <!-- 打包 --> <target name="mvn.package-ci"> <echo message="打包" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" -U clean package -f ci-pom.xml -Dmaven.test.skip=true" /> </exec> </target> <!-- 打包 --> <target name="mvn.test-ci"> <echo message="打包" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" -U clean package -f ci-pom.xml" /> </exec> </target> <target name="mvn.site"> <echo message="生成站点" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" site -U " /> </exec> </target> <target name="mvn.install"> <echo message="将jar包发布到本地库中,将会先执行打包(mvn package)的操作" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" install -U" /> </exec> </target> <!-- 更新snapshot的jar包 --> <target name="mvn.update.snapshot"> <echo message="从maven服务器里更新snapshot的jar包" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" dependency:tree -q -U" /> </exec> </target> <target name="mvn.dependency:tree"> <echo message="分析出pom.xml的关系" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" dependency:tree -e -U" /> </exec> </target> <!-- 发布 --> <target name="mvn.deploy"> <echo message="发布jar包到远程的maven服务器中,### 注意:用户和密码配置在setting.xml中" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" deploy -e" /> </exec> </target> <target name="copy.jar.to.runtime-lib"> <echo message="开始根据pom.xml配置文件复制运行时所需的jar包到target/runtime-lib目录中,MAVEN_HOME为[${maven.home}]" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" dependency:copy-dependencies -U -DoutputDirectory=${dir.runtime-lib} -DincludeScope=runtime -e" /> </exec> <echo message="开始根据pom.xml配置文件复制测试或中间件所提供的jar包到target/lib目录中,MAVEN_HOME为[${maven.home}]" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" dependency:copy-dependencies -U -DoutputDirectory=${dir.lib} -DexcludeScope=runtime" /> </exec> </target> <target name="jettyStart"> <antcall target="mvn.jetty:run-war" /> </target> <!-- 重新启动jetty --> <target name="mvn.jetty:restart-build-pom"> <echo message="重新启动jetty,用build-pom.xml文件,不使用pom.xml文件,因为编译问题" /> <mkdir dir="target/work" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" -f ci-pom.xml jetty:stop" /> </exec> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" -f ci-pom.xml clean " /> </exec> <!--clean 之后 创建 运行目录 --> <mkdir dir="target/work" /> <!-- spawn 代表在新的进程运行.运行完直接结束 --> <exec executable="${maven.home}\bin\mvn.bat" spawn="false"> <arg line=" -U -Djetty.port=8888 -f ci-pom.xml jetty:run" /> </exec> </target> <target name="mvn.jetty:stop"> <echo message="停止jetty运行" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" jetty:stop -e" /> </exec> </target> <target name="help"> <echo message="帮助" /> </target> <!-- 使用war运行 --> <target name="mvn.jetty:run-war"> <!-- 先尝试关闭当前运行的jetty --> <antcall target="mvn.jetty:stop" /> <!-- 进行打包 --> <echo message="打包" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" -U package -f ci-pom.xml" /> </exec> <!-- 运行war包 --> <exec executable="${maven.home}\bin\mvn.bat" spawn="true"> <arg line=" -Djetty.port=8888 -f ci-pom.xml jetty:run-war -e" /> </exec> </target> <!-- 加载 build.properties--> <property environment="env" /> <property name="tomcat.home" value="${env.TOMCAT_HOME}" /> <target name="deploy2tomcat" depends=""> <echo message="用tomcat运行housing" /> </target> <!-- 用tomcat发布 --> <target name="mvn.tomcat:deploy"> <echo message="从maven服务器里更新snapshot的jar包" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" -q -U -f ci-pom.xml dependency:tree clean" /> </exec> <echo message="将之前用的tomcat布的程序删除,准备进行重新发布" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" -f ci-pom.xml tomcat:undeploy" /> </exec> <echo message="发布tomcat" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" -f ci-pom.xml tomcat:deploy -Dmaven.test.skip=true" /> </exec> </target> <!-- 用tomcat发布 --> <target name="mvn.tomcat-2:deploy"> <echo message="从maven服务器里更新snapshot的jar包" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" -q -U -f ci-pom-2.xml dependency:tree clean" /> </exec> <echo message="将之前用的tomcat布的程序删除,准备进行重新发布" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" -f ci-pom-2.xml tomcat:undeploy" /> </exec> <echo message="发布tomcat" /> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" -f ci-pom-2.xml tomcat:deploy -Dmaven.test.skip=true" /> </exec> </target> <target name="mvn.tomcat:deploy-inLinux"> <echo message="从maven服务器里更新snapshot的jar包" /> <exec executable="${maven.home}\bin\mvn"> <arg line=" -q -e -U -f ci-pom.xml dependency:tree clean" /> </exec> <echo message="将之前用的tomcat布的程序删除,准备进行重新发布" /> <exec executable="${maven.home}\bin\mvn"> <arg line=" -e -f ci-pom.xml tomcat:undeploy" /> </exec> <echo message="发布tomcat" /> <exec executable="${maven.home}\bin\mvn"> <arg line=" -e -f ci-pom.xml tomcat:deploy" /> </exec> </target> <!-- 下载所有jar包的源代码 --> <target name="download-sources"> <exec executable="${maven.home}\bin\mvn.bat"> <arg line=" dependency:sources -Dsilent=true -DdownloadSources=true" /> </exec> </target>
配置component
- 如果打包组件中包括jsp页面则需要配置此项(以gjjtest为例)
- 第一步:选中项目>>右键>>properties>>Java Compiler>>1.6 把编译环境改为1.6
- 第二步:选中src/main/java>>con.ylink.gjjtest<模块名> 存放component文件的包名必须是com.ylink开头
- 第三步:复制component-**-**.xml **处改为对应模块名gjj-test,新建类GjjTestComponent继承com.ylink.framework.component.AbstractComponent
- 第四步:配置component-gjj-test.xml *****处改为对应的模块名 以gjj-test为例
<component> *****<!-- 编码,唯一 --> <code>com.ylink.gjjtest</code> <!-- 组件的名字 --> *****<name>Test组件</name> <!-- 组件的版本,现在没有用,随便填 --> <version>3.0</version> <!-- 加载的权重,如果不存在依赖时,越小越早加载 --> <loadOnStartup>1</loadOnStartup> <!-- 组件的定义类,该类要实现Component的接口 --> <componentClass>com.ylink.gjjtest.GjjTestComponent</componentClass> <componentResource> *****<!-- 资源,页面要在webapp下解压的路径 (如:/user 或 /a/b)--> <resourceUmCompressDir>/gjj-test</resourceUmCompressDir> *****<!-- 压缩包的路径(在jar里的路径,用/分割),如(com/ylink/user/user.zip 或 resources/user.zip) --> <resourceLocation>resources/gjjtest.zip</resourceLocation> *****<!-- 描述发布信息的文件路径(在jar包中.如:resources/com.ylink.user.properies),在打包的时候一般要把该文件打包到jar中 文件有属性deployTime (deployTime=20080808121212)格式yyyyMMddHHmmss --> <metaDataResource>/resources/com.ylink.gjjtest.properties</metaDataResource> </componentResource> </component>
maven命令说明
maven定义的生命周期中主要的相位如下:
- validate: 验证项目是否正确以及相关信息是否可用。
- compile: 编译。
- test: 通过junit进行单元测试。
- package: 根据事先指定的格式(比如jar),进行打包。
- integration-test: 部署到运行环境中,准备进行集成测试。
- verify: 对包进行有效性性和质量检查。
- install: 安装到本地代码库。
- deploy: 在集成或发布环境,将包发布到远程代码库。
- 在“默认”的生命周期之外,还有两个“阶段”:
- clean: 清除以前的构建物。
- site: 生成项目文档。