枫中畅游

关注技术,热爱生活
随笔 - 15, 文章 - 0, 评论 - 3, 引用 - 0
数据加载中……

2013年6月17日

linux系统之上搭建maven 之nexus服务篇

       今天刚好有点时间,就想在公司的服务器搭建一个私服,以便以后可以唯我所用,当然前提是服务器最好可以上网,否则还需要配置代理服务器,前两天刚好把服务器的网络给配置了下,这边就不详述了!大家一定着急了吧,稍安务燥,这就进入正题,O(∩_∩)O~

        linux安装过程和window主机还是差别挺大的。

1.下载nexus集成版

到这个地方http://www.sonatype.org/nexus/go 下载压缩包,我这边下载的是nexus-2.0.3-bundle.tar.gz这个版本。

2. 解压到相应的目录

tar  -xzvf  nexus-2.0.3-bundle.tar.gz , 我这边放在/home/linjx/opendev/nexus-2.0.3目录下。

 

3. 设置为系统服务

这里需要使用root权限,具体请看http://books.sonatype.com/nexus-book/reference/install-sect-service.html

简单如下:

# cd  /etc/init.d

# cp  /home/linjx/opendev/nexus-2.0.3/bin/jsw/linux-x86-64/nexus ./nexus

# chmod 755 nexus

# chkconfig --add nexus

# chkconfig --levels 345 nexus on

 

4. 编辑/etc/init.d/nexus的文本

4.1. 添加以下变量

RUN_AS_USER=linjx    ## 这个主要为了后面使用,不需要使用root用户启动服务

NEXUS_HOME=/home/linjx/opendev/nexus-2.0.3/

PLATFORM=linux-x86-64

PLATFORM_DIR="${NEXUS_HOME}/bin/jsw/${PLATFORM}"

4.2. 修改以下变量

WRAPPER_CMD="${PLATFORM_DIR}/wrapper"

WRAPPER_CONF="${PLATFORM_DIR}/../conf/wrapper.conf"

 

 

PIDDIR="${NEXUS_HOME}"

 

5. 启动服务

切换会自己的用户,不需要使用root用户;

# service nexus start

 

这个大家出现什么情况,是不是失败了!界面上出现 :Could not write pid file /etc/rc.d/init.d/./nexus.pid: Permission denied通过查看日志文件:

fzdev#[/home/linjx/opendev/nexus-2.0.3/logs] cat w*  

wrapper  | ERROR: Could not write pid file /etc/rc.d/init.d/./nexus.pid: Permission denied

 

怎么办呢,根据信息提示,nexus.pid无法写入,应该还是权限问题,这个应该跟启动当前服务有关。

 

查文档http://books.sonatype.com/nexus-book/reference/install-sect-service.html后发现,一有段信息没有配置,

Change PIDDIR to a directory where this user has read/write permissions. In most Linux distributions, /var/run is only writable by root. The properties you need to add to customize the PID file location is "wrapper.pid". For more information about this property and how it would be configured in wrapper.conf, see: http://wrapper.tanukisoftware.com/doc/english/properties.html

 

大概意思就是服务启动时无法写入pid,就是说init.d这个目录当前用户是没有权限写的,怎么办呢。可以自定义pid写入目录,那么在哪里配置呢,是不是又想起了wrapper.conf了,其他文档中也说明了。

好吧,那就再加个配置吧,这样:PIDDIR="/home/linjx/piddir"

 

然后再启动服务,果然成功了!具体可以看看附件中的详细的日志!



 

6. 启动之后,可以登录首页查看nexus的界面

http://192.168.1.26:8081/nexus/index.html

 

默认管理员用户名/密码: admin/admin123

 



 

posted @ 2013-08-21 09:32 javalinjx 阅读(13880) | 评论 (2)编辑 收藏

使用leiningen搭建clojure开发环境

首先来讲下Leiningen是什么东东?

Leiningen是一个用于自动化(构建)clojure项目的工具。

它可以做到:

    创建新项目

    管理你的项目的依赖关系

    运行测试

    运行一个REPL(读取-求值-打印循环:read-eval-print loop)

    编译java源码

    运行项目

    为项目产生一个Maven风格的POM文件

    为了部署,编译和打包项目

    发布类库到Maven仓库,例如Clojars

    运行Clojure编写的自定义的自动化任务(称为Leiningen插件)

    ... 具体可以查看国内的大牛(killme2008)翻译的Leiningen教程中文版的详细介绍。

好些话说多了点,大家别着急啊,马上就切入主题:

1. 下载安装Leiningen

   linux: 

        1. 确保你是jdk 6 版本以下的。

        2. 下载脚本lein

        3. 把lein加入下当前的$path下(~/bin 是最好的选择)

        4. 赋可执行权限(chmod 755 ~/bin/lein)

  windows:

        1. 可以直接下载打包好的文件,地址是:Leiningen for windows

        2. 点击下载好的*.exe文件进行安装

        3. 安装好后,可以查看环境变量中会有相应的变量被设置好了:

         lein.bat is added to your PATH variable.

        LEIN_JAVA_CMD is set to point to your selected JDK, and the :java-cmd property is set in your              user profile in profiles.clj.

        

        接下来,打开命令窗口,输入命令:lein self-install  ,会自动下载安装leiningen 相关的jar文件。

       

       验证下安装成果: 在命令窗口中输入lein repl ,会自动连上nREPL server,进入repl模式,如下所示:

 

      

Shell代码  收藏代码
  1. C:\Users\linjx>lein repl  
  2. nREPL server started on port 21912  
  3. REPL-y 0.2.0  
  4. Clojure 1.5.1  
  5.     Docs: (doc function-name-here)  
  6.           (find-doc "part-of-name-here")  
  7.   Source: (source function-name-here)  
  8.  Javadoc: (javadoc java-object-or-class-here)  
  9.     Exit: Control+D or (exit) or (quit)  
  10.   
  11. user=>  

 

    如果出现上面的提示,则说明leiningen安装成功,你可以在使用leiningen开发你的clojure之旅了。

    但是往往我们不满足于现状,希望可以更有效的使用lein编写clojure。类似java的idea,eclipse一样,都对编写java提供了强大的工具,那么我们可以选择什么样的工具呢,毫无疑问,Emacs是最合适的工具,没有之一:)

     对于我这断断续续学习emacs的来说,还真不是不容易,昨晚查看了相关的e文说明,在emacs中成功装配了nrepl ,用以后续的开发学习,便记录一下,希望对自己以后查阅,以及需要的人有所帮助。

     首先,我本地有emacs 24 版本的, 这里不想讲emacs 的安装,这个大家自个儿查询下google便可以了。

     在安装好leiningen之后,现在进入nrepl的主页看看,这是个什么东东!

     nrepl.el is an Emacs client for nREPL,the Clojre networked REPL server.It's a great alternative to the now deprecated combination fo SLIME + swank-clojure.

    nrepl.el是emacs作为nrepl的一个客户端,nrepl是一个反对目前slime+swank-clojure组合的最好的替代品。

     下面来看下如何安装nrepl.el:

      1. emacs 24 以及更高版本是构建在package.el之上的,但是emacs 23以下版本的,你需要自己获取package.el .

      虽然我的是24版本的,但是我也下载了package.el,并存放在     C:\Users\linjx\AppData\Roaming\.emacs.d 目前下,这个是我的emacs在windows下的配置目录。

      2. 这里需要提一个文件,即 .emacs 文件,这个是emacs初始化配置的文件,位于C:\Users\linjx\AppData\Roaming 目录下。

         如果你不需要使用Marmalade,则添加配置 到 .emacs文件中,如下所示:

 

Lisp代码  收藏代码
  1. (require 'package)  
  2. (add-to-list 'package-archives  
  3.              '("marmalade" . "http://marmalade-repo.org/packages/"))  
  4. (package-initialize)  

 

 由于使用MELPA the code ,需要添加配置到 .emacs文件中,

     

Lisp代码  收藏代码
  1. (require 'package)  
  2. (add-to-list 'package-archives  
  3.              '("melpa" . "http://melpa.milkbox.net/packages/") t)  
  4. (package-initialize)  

 

  在emacs中打开.emacs文件,并M-x eval-buffer,执行当前的配置。

    

     3.  刷新配置

Lisp代码  收藏代码
  1. M-x package-refresh-contents  回车  

     emacs会自动下载安装Marmalade , melpa相关的配置;

 

     4. 安装nrepl

         输入命令 

命令代码  收藏代码
  1. M-x package-install 回车  
  2.        nrepl 回车  

 

     致此,nrepl集成到emacs的安装完毕,可以使用emacs开发你的hello world!了。

( 当然,emacs还可以与其他集成用来clojure的开发,这里我就不详述了,毕竟没有使用!)

 

现在我们使用lein new 一个clojure项目出来:

1. $  lein new hello

 

2. 打开emacs,在buffer中打开 hello所在的目录下的project.clj文件

 

3. 输入命令:M-x nrepl-jack-in,即可初始化一个nrepl server  和 nrepl client

如下图所示:



 

 

posted @ 2013-07-03 13:40 javalinjx 阅读(7577) | 评论 (0)编辑 收藏

git命令记录

从服务器创建一个本地仓库的clone版本:

git clone /path/to/repository

如果是远端服务器上的仓库,你的命令是这样:

git clone username@host:/path/to/repository

多种方式的URI

 

git add <filename>

git add *

git commit -m "代码提交信息"

 

将本地仓库的head中的东西提交到远程服务器上:

git push origin master(分支名)

欲将本地的仓库连接到某个远程服务器

git remote add origin <server>

 

持续补充,作为自己查询使用

posted @ 2013-07-03 12:18 javalinjx 阅读(148) | 评论 (0)编辑 收藏

Junit 学习笔记

上周空闲,看完了《单元测试之道》,这里对自己的学习做个小结,以便以后查阅: 

 

一般原则:
测试任何可能失败的地方。
测试任何已经失败的地方。
对于新加的代码,在被证明正确之前,都可能是有问题的。
至少编写和产品代码一样多的测试代码。
针对每次编译都做局部测试。
签入代码之前做全局测试。
需要回答的问题:
我如何知道代码运行是否正确呢?
我要如何对它进行测试?
还有哪些方面可能会发生错误?
这个问题是否会在其他的地方出现呢?
测试哪些方面 :使用junit 测试的6个方面,统称为:Right-BICEP:
Right --- 结果是否正确?
B --- 是否所有的边界条件都是正确?
I --- 能查一下反向关联吗?
C --- 能用其他手段交叉检查一下结果吗?
E --- 你是否可以强制错误条件发生?
P --- 是否满足性能要求?
编写测试用例原则,correct边界条件:
conformance (一致性)-- 值 是否和预期的一致。
Ordering(顺序性)--一组值是该有序或者无序的。
Range(区间性)--值是否位于合理的最小值和最大值之内。
Reference(引用 、耦合性)--代码是否引用了一些不在代码本身控制范围之内的外部资源。
Existence(存在性)--值是否存在(例如,是否是非null,非0,在一个集合中等等)。
Cardinatity(基数性)--是否恰好有足够的值?
Time(相对或者绝对的时间性)--所有事情的发生是否是有序的?是否是在正确的时刻?是否恰好及时?
环境方面的因素:
内存耗光。
磁盘用满。
时钟出问题。
网络不可用或者有问题。
系统过载。
调色板颜色数目有限。
显示分辨率过高或者过低。
0-1-n 原则
Mock对象:
真实对象具有不可确定的行为(产生不可预测的结果,如股票行情)
真实对象很难被创建
真实对象的某些行为很难触发(如网络错误)。
真实对象令程序的运行速度很慢。
真实对象有(或者是)用户界面。
测试需要询问真实对象它是如何被调用的(例如,测试可能需要验证某个回调函数是否被调用了)。
真实对象实际上并不存在(当需要和其他开发小组,或者新的硬件系统打交道的时候,这是一个普遍问题)。
借助于mock对象,我们就可以解决上面提到的所有问题。在使用mock对象进行测试的时候,总共有3个步骤,分别是:
1. 使用一个接口来描述这个对象。
2. 为产品代码实现这个接口。
3. 以测试为目的,在mock对象中实现这个接口。
mock提供了所有系统功能的现成接口,所以在更多的时候,人们可能(也许吧)会使用它而不是直接调用诸如System.currentTimeMillis()这样的东西,而是躲在接口背后拥有了控制一切行为的能力。
这就是mock对象的全部;伪装出真实世界的某些部分,使你可以集中精力测试好自己编写的代码。让我们接下来看看更加复杂的例子吧。
好的测试是一个A-TPIP:
1. 自动化 (Automatic).  调用测试自动化和检查结果自动化。
2. 彻底的 (Thorough).
3. 可重复 (Repeatable).
4. 独立的 (Independent).
5. 专业的 (Professional).
在你发现bug时,所需要做的就是以下四个步骤:
1.验明bug;
2.编写一个将失败的测试来证明bug的存在。
3.修正代码,让测试通过。
4.验证所有的测试仍然可以通过(也就是,你没有在修补的时候损坏其他的测试)。
测试的频率:
1.编写新的函数    编译并运行本地的单元测试。
2.修正bug    运行测试来让bug现形;修并再次运行单元测试。
3.每次成功编译之后   运行本地的单元测试。
4.每次对版本控制的签入   运行所有的模块或者系统的单元测试。
5. 持续不断地   应当有一台专门的机器来运行完整的构建和测试。每次都应该从头开始,并且整天自动运行(要么是周期性的,要么是每当有版本控制的签入行为的时候)
编码和评审以这样的顺序进行:
1. 编写test case 和/或测试代码。
2. 评审test case 和/或测试代码。
3. 经评审修改test case 和/或测试代码。
4. 编写能通过所有测试的产品代码。
5. 评审产品代码和测试代码。
6. 在每次评审后,修改测试代码和产品代码。
在某些机器上测试失败:
这究竟是为什么呢?这些机器之间有什么区别呢?
比较明显的答案可能是下面这些资源的差异:操作系统版本号、运行库、java运行引擎、数据库驱动等。
统一使用junit 方法的setup 和 tearDown方法。

posted @ 2013-06-17 09:52 javalinjx 阅读(203) | 评论 (0)编辑 收藏