Loading...

java .net

2010年6月13日

最近在学习如何使用maven,做了一个demo(基于S2S整合),总结一下与大家分享,期待与大家讨论以期快速进步。

一、maven介绍

1、maven是什么

http://maven.apache.org/
官方解释:Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

2、使用maven有什么好处,解决什么问题

jar统一管理了:

如果建立了一个本地的jar仓库,那么所有人都是从仓库里面下载jar,拷贝项目时只需要copy几K的源码即可!其次,依然是仓库,使得每个人的jar版本都是一致的,不会出现因为版本不同,引起的莫名其妙的错误。
项目的自动化:

只需要mvn package命令,在eclipse里面,看run里面,只需要选择就行了!它会自动的从编译,测试开始,一直到打包,自动的运行,保证你的包没有问题。

我们在做多个不同的Java项目时,每个项目所用到的库文件基本都是大同小异的,通常的做法是每个项目下面都会复制一份这些库文件,甚至会把这些库文件都提交到vss上去,这样带来的问题不仅是增大了项目占用的硬盘空间,而且也使包管理很混乱。

我们可以这样查看jar包的依赖关系,是不是很爽?!
image

还可以单元测试覆盖率报表:

image

2、helloword

1、下载Maven 附件中的maven3.jar 解压到任意目录

2、安装eclipse插件m2eclipse

方式一:在线安装 更新地址是:http://m2eclipse.sonatype.org/sites/m2e
方式二:本地安装 help-->install new softeware-->add-->name填写maven-->archive..-->jar:file:/../m2e.zip!/-->ok
安装完成重启eclipse,在Window-->Preferences-->Maven下配置

image

禁用eclipse启动时更新maven index 主要是每次eclipse启动时都更新很烦人

image

添加自己的maven

3、新建maven项目

按照下图步骤

image

  • groupId定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联。譬如在googlecode上建立了一个名为myapp的项目,那么groupId就应该是com.googlecode.myapp.
  • artifactId定义了当前Maven项目在组中唯一的ID,groupId为com.googlecode.myapp的例子中,你可能会为不同的子项目(模块)分配artifactId,如myapputil、myappdomain、myappweb等。
  • version指定了项目当前的版本——1.0SNAPSHOT。SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。随着项目的发展,version会不断更新,如升级为1.0、1.1SNAPSHOT、1.1、2.0等。
  • name元素声明了一个对于用户更为友好的项目名称

点击Finish完成

4、maven项目结构

下图为基于maven项目结构,这里跟我们以前的项目结构很不一样,以前的项目结构约定俗成的只有两块 一个src 一个webRoot,当然这些都可以随意配置,比如WebRoot有的叫WebContent

image
这里maven倡导约定优于配置,maven的约定就是以下目录结构
src/main/java 下存放java类
src/main/webapp 下存放页面文件(需要手动创建)
src/main/resources 下存放资源文件
src/test/java 下存放单元测试代码
src/test/resources 下存放测试资源文件

5、添加jar包

只需维护pom.xml
比如添加struts2-core
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.0.11.2</version>
</dependency>

我在172.20.66.230上部署了一个maven仓库,访问地址http://172.20.66.230:8081/nexus/

maven会根据pom.xml中的配置访问230的仓库下载对应的jar source 以及doc,下载到哪?这要看maven3/conf/settings.xml 55:

<localRepository>F:/Maven3/repository</localRepository>

6、编写代码

附件中有一个struts2+spring 的demo,解压然后import eclipse

在项目名上右键 run as -->Run Configurations

image

按图配置,点击Run即可。浏览器中访问http://localhost:8080/MavenSSH/

Maven运行的生命周期

  • 复制src/main/resources资源文件到输出目录

  • 编译src/main/java下的源代码

  • 复制src/test/resources下的测试用资源文件到测试输出目录

  • 编译src/test/java下的测试用例

  • 运行测试用例

  • 打包生成

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

  • 以上是一个简单的例子,只是用它获取依赖的jar包 。maven还有很多诸如项目管理方面的功能,比如文档编制、发布管理、配置管理...

  • 第一个次运行项目会比较慢,因为要下载jar包。

  • MavenSSH.rar是一个struts2与spring集成的例子,页面用到了sitemesh div+css 也值得学习

  • 项目debug是运行在jetty(类似于tomcat的容器)中。

posted @ 2011-04-18 16:09 猪 阅读(1321) | 评论 (5)编辑 收藏

如果部署GAE时正在upload files时退出,下次部署时会报错

Another transaction by user is already in progress for this app and major version. That user can undo the transaction with appcfg.py's "rollback" command

 

找到eclipse中的GAE SDK目录

如:D:\eclipse\plugins\com.google.appengine.eclipse.sdkbundle.1.3.8_1.3.8.v201010161055\appengine-java-sdk-1.3.8\bin

 

执行命令

appcfg.cmd rollback 后面跟gae项目war所在目录

如 appcfg.cmd rollback D:/spring/eclipse_workspace/taobaoke/war

 

执行:

********************************************************
Warning: Future versions of the Dev App Server will require Java 1.6 or later. P
lease upgrade your JRE.
********************************************************
Reading application configuration data...
2010-11-15 9:34:23 com.google.apphosting.utils.config.AppEngineWebXmlReader read
AppEngineWebXml
信息: Successfully processed D:/spring/eclipse_workspace/taobaoke/war\WEB-INF/ap
pengine-web.xml
2010-11-15 9:34:23 com.google.apphosting.utils.config.AbstractConfigXmlReader re
adConfigXml
信息: Successfully processed D:/spring/eclipse_workspace/taobaoke/war\WEB-INF/we
b.xml
2010-11-15 9:34:23 com.google.apphosting.utils.config.AbstractConfigXmlReader re
adConfigXml
信息: Successfully processed D:/spring/eclipse_workspace/taobaoke/war\WEB-INF/cr
on.xml
Beginning server interaction for taokeapp...
0% Rolling back the update.
Success.
Cleaning up temporary files...

posted @ 2010-11-15 09:55 猪 阅读(420) | 评论 (0)编辑 收藏

在网上无意搜到一个用Ext实现的淘宝客,恩 ,咱用GWT做一个车轮

下了淘宝的 SDK for java就开干 参考API文档按部就班

在淘宝的沙箱里测试,很顺利,乘胜前进,到正式环境下测试

问题来了

invalid signature

网上搜了一通,有说时间戳不对,果不其然,GAE使用的是标准时间,整整差了8小时,遂在获得的当前时间上加了8小时,OK

invalid signature 可能的另一个原因是APP_KEY 或 APP_SERCET不正确,仔细检查

 

调用 taobao.item.get

 

1 TaobaoClient client=new DefaultTaobaoClient(TaobaokeConstant.SANDBOX_URL, TaobaokeConstant.APP_KEY, TaobaokeConstant.APP_SERCET);
2 ItemcatsGetRequest req=new ItemcatsGetRequest();
3 java.util.Calendar c=java.util.Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
4 c.add(Calendar.HOUR, 8);
5 req.setTimestamp(c.getTime().getTime()) ;
6 req.setParentCid(new Long(0));
7 ItemcatsGetResponse response=client.execute(req);
8 return response.getItemCats();

 

调用 taobao.taobaoke.items.get

 
1 TaobaoClient client=new DefaultTaobaoClient(TaobaokeConstant.SANDBOX_URL, TaobaokeConstant.APP_KEY,TaobaokeConstant.APP_SERCET);
2 TaobaokeItemsGetRequest req=new TaobaokeItemsGetRequest();
3 req.setFields("num_iid,title,nick,pic_url,price,click_url,commission,commission_rate,commission_num,commission_volume,shop_click_url,seller_credit_score,item_location,volume,taobaoke_cat_click_url,keyword_click_url");
4 req.setCid(Long.parseLong(cid));
5 req.setNick(TaobaokeConstant.NICK);
6 req.setSort("commissionRate_desc");
7 TaobaokeItemsGetResponse response=client.execute(req);
8 return response.getTaobaokeItems();
 
想用GAE JCache API 加入缓存以减轻压力,但屡试不行,从缓存中取 的时候报错
没找到原因
 
改用自己写的缓存,然后用App Engine Cron 服务管理缓存
 
corn.xml
 
1 <?xml version="1.0" encoding="UTF-8"?>
2 <cronentries>
3   <cron>
4     <url>/cron/recache</url>
5     <description>Repopulate the cache every 1 hours</description>
6     <schedule>every 1 hours</schedule>
7   </cron>
8 </cronentries>
posted @ 2010-10-21 11:33 猪 阅读(737) | 评论 (0)编辑 收藏
posted @ 2010-06-13 09:54 猪 阅读(429) | 评论 (0)编辑 收藏
     摘要: 01 var $j = jQuery.noConflict(); 02 //使用此方法验证所有text textarea 是否含有非法字符 03 $j(document).ready(function(){ 04    $j("input[type='text']").each(functio...  阅读全文
posted @ 2010-06-13 09:53 猪 阅读(2042) | 评论 (1)编辑 收藏

公告

希望有一天

我能用鼠标双击我的钱包

然后选中一张100元

按住“ctrl+c”

接着不停的“ctrl+v”

嘻嘻~~~笑醒~~~



导航

<2010年6月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

统计

常用链接

留言簿(6)

随笔分类(102)

随笔档案(398)

文章分类

文章档案(10)

有趣网络

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜