楓中暢游

          關(guān)注技術(shù),熱愛生活
          隨筆 - 15, 文章 - 0, 評(píng)論 - 3, 引用 - 0
          數(shù)據(jù)加載中……

          2013年6月17日

          linux系統(tǒng)之上搭建maven 之nexus服務(wù)篇

                 今天剛好有點(diǎn)時(shí)間,就想在公司的服務(wù)器搭建一個(gè)私服,以便以后可以唯我所用,當(dāng)然前提是服務(wù)器最好可以上網(wǎng),否則還需要配置代理服務(wù)器,前兩天剛好把服務(wù)器的網(wǎng)絡(luò)給配置了下,這邊就不詳述了!大家一定著急了吧,稍安務(wù)燥,這就進(jìn)入正題,O(∩_∩)O~

                  linux安裝過程和window主機(jī)還是差別挺大的。

          1.下載nexus集成版

          到這個(gè)地方http://www.sonatype.org/nexus/go 下載壓縮包,我這邊下載的是nexus-2.0.3-bundle.tar.gz這個(gè)版本。

          2. 解壓到相應(yīng)的目錄

          tar  -xzvf  nexus-2.0.3-bundle.tar.gz , 我這邊放在/home/linjx/opendev/nexus-2.0.3目錄下。

           

          3. 設(shè)置為系統(tǒng)服務(wù)

          這里需要使用root權(quán)限,具體請看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    ## 這個(gè)主要為了后面使用,不需要使用root用戶啟動(dòng)服務(wù)

          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. 啟動(dòng)服務(wù)

          切換會(huì)自己的用戶,不需要使用root用戶;

          # service nexus start

           

          這個(gè)大家出現(xiàn)什么情況,是不是失敗了!界面上出現(xiàn) :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

           

          怎么辦呢,根據(jù)信息提示,nexus.pid無法寫入,應(yīng)該還是權(quán)限問題,這個(gè)應(yīng)該跟啟動(dòng)當(dāng)前服務(wù)有關(guān)。

           

          查文檔http://books.sonatype.com/nexus-book/reference/install-sect-service.html后發(fā)現(xiàn),一有段信息沒有配置,

          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

           

          大概意思就是服務(wù)啟動(dòng)時(shí)無法寫入pid,就是說init.d這個(gè)目錄當(dāng)前用戶是沒有權(quán)限寫的,怎么辦呢。可以自定義pid寫入目錄,那么在哪里配置呢,是不是又想起了wrapper.conf了,其他文檔中也說明了。

          好吧,那就再加個(gè)配置吧,這樣:PIDDIR="/home/linjx/piddir"

           

          然后再啟動(dòng)服務(wù),果然成功了!具體可以看看附件中的詳細(xì)的日志!



           

          6. 啟動(dòng)之后,可以登錄首頁查看nexus的界面

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

           

          默認(rèn)管理員用戶名/密碼: admin/admin123

           



           

          posted @ 2013-08-21 09:32 javalinjx 閱讀(14956) | 評(píng)論 (2)編輯 收藏

          使用leiningen搭建clojure開發(fā)環(huán)境

          首先來講下Leiningen是什么東東?

          Leiningen是一個(gè)用于自動(dòng)化(構(gòu)建)clojure項(xiàng)目的工具。

          它可以做到:

              創(chuàng)建新項(xiàng)目

              管理你的項(xiàng)目的依賴關(guān)系

              運(yùn)行測試

              運(yùn)行一個(gè)REPL(讀取-求值-打印循環(huán):read-eval-print loop)

              編譯java源碼

              運(yùn)行項(xiàng)目

              為項(xiàng)目產(chǎn)生一個(gè)Maven風(fēng)格的POM文件

              為了部署,編譯和打包項(xiàng)目

              發(fā)布類庫到Maven倉庫,例如Clojars

              運(yùn)行Clojure編寫的自定義的自動(dòng)化任務(wù)(稱為Leiningen插件)

              ... 具體可以查看國內(nèi)的大牛(killme2008)翻譯的Leiningen教程中文版的詳細(xì)介紹。

          好些話說多了點(diǎn),大家別著急啊,馬上就切入主題:

          1. 下載安裝Leiningen

             linux: 

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

                  2. 下載腳本lein

                  3. 把lein加入下當(dāng)前的$path下(~/bin 是最好的選擇)

                  4. 賦可執(zhí)行權(quán)限(chmod 755 ~/bin/lein)

            windows:

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

                  2. 點(diǎn)擊下載好的*.exe文件進(jìn)行安裝

                  3. 安裝好后,可以查看環(huán)境變量中會(huì)有相應(yīng)的變量被設(shè)置好了:

                   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  ,會(huì)自動(dòng)下載安裝leiningen 相關(guān)的jar文件。

                 

                 驗(yàn)證下安裝成果: 在命令窗口中輸入lein repl ,會(huì)自動(dòng)連上nREPL server,進(jìn)入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=>  

           

              如果出現(xiàn)上面的提示,則說明leiningen安裝成功,你可以在使用leiningen開發(fā)你的clojure之旅了。

              但是往往我們不滿足于現(xiàn)狀,希望可以更有效的使用lein編寫clojure。類似java的idea,eclipse一樣,都對編寫java提供了強(qiáng)大的工具,那么我們可以選擇什么樣的工具呢,毫無疑問,Emacs是最合適的工具,沒有之一:)

               對于我這斷斷續(xù)續(xù)學(xué)習(xí)emacs的來說,還真不是不容易,昨晚查看了相關(guān)的e文說明,在emacs中成功裝配了nrepl ,用以后續(xù)的開發(fā)學(xué)習(xí),便記錄一下,希望對自己以后查閱,以及需要的人有所幫助。

               首先,我本地有emacs 24 版本的, 這里不想講emacs 的安裝,這個(gè)大家自個(gè)兒查詢下google便可以了。

               在安裝好leiningen之后,現(xiàn)在進(jìn)入nrepl的主頁看看,這是個(gè)什么東東!

               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的一個(gè)客戶端,nrepl是一個(gè)反對目前slime+swank-clojure組合的最好的替代品。

               下面來看下如何安裝nrepl.el:

                1. emacs 24 以及更高版本是構(gòu)建在package.el之上的,但是emacs 23以下版本的,你需要自己獲取package.el .

                雖然我的是24版本的,但是我也下載了package.el,并存放在     C:\Users\linjx\AppData\Roaming\.emacs.d 目前下,這個(gè)是我的emacs在windows下的配置目錄。

                2. 這里需要提一個(gè)文件,即 .emacs 文件,這個(gè)是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,執(zhí)行當(dāng)前的配置。

              

               3.  刷新配置

          Lisp代碼  收藏代碼
          1. M-x package-refresh-contents  回車  

               emacs會(huì)自動(dòng)下載安裝Marmalade , melpa相關(guān)的配置;

           

               4. 安裝nrepl

                   輸入命令 

          命令代碼  收藏代碼
          1. M-x package-install 回車  
          2.        nrepl 回車  

           

               致此,nrepl集成到emacs的安裝完畢,可以使用emacs開發(fā)你的hello world!了。

          ( 當(dāng)然,emacs還可以與其他集成用來clojure的開發(fā),這里我就不詳述了,畢竟沒有使用!)

           

          現(xiàn)在我們使用lein new 一個(gè)clojure項(xiàng)目出來:

          1. $  lein new hello

           

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

           

          3. 輸入命令:M-x nrepl-jack-in,即可初始化一個(gè)nrepl server  和 nrepl client

          如下圖所示:



           

           

          posted @ 2013-07-03 13:40 javalinjx 閱讀(8284) | 評(píng)論 (0)編輯 收藏

          git命令記錄

          從服務(wù)器創(chuàng)建一個(gè)本地倉庫的clone版本:

          git clone /path/to/repository

          如果是遠(yuǎn)端服務(wù)器上的倉庫,你的命令是這樣:

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

          多種方式的URI

           

          git add <filename>

          git add *

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

           

          將本地倉庫的head中的東西提交到遠(yuǎn)程服務(wù)器上:

          git push origin master(分支名)

          欲將本地的倉庫連接到某個(gè)遠(yuǎn)程服務(wù)器

          git remote add origin <server>

           

          持續(xù)補(bǔ)充,作為自己查詢使用

          posted @ 2013-07-03 12:18 javalinjx 閱讀(267) | 評(píng)論 (0)編輯 收藏

          Junit 學(xué)習(xí)筆記

          上周空閑,看完了《單元測試之道》,這里對自己的學(xué)習(xí)做個(gè)小結(jié),以便以后查閱: 

           

          一般原則:
          測試任何可能失敗的地方。
          測試任何已經(jīng)失敗的地方。
          對于新加的代碼,在被證明正確之前,都可能是有問題的。
          至少編寫和產(chǎn)品代碼一樣多的測試代碼。
          針對每次編譯都做局部測試。
          簽入代碼之前做全局測試。
          需要回答的問題:
          我如何知道代碼運(yùn)行是否正確呢?
          我要如何對它進(jìn)行測試?
          還有哪些方面可能會(huì)發(fā)生錯(cuò)誤?
          這個(gè)問題是否會(huì)在其他的地方出現(xiàn)呢?
          測試哪些方面 :使用junit 測試的6個(gè)方面,統(tǒng)稱為:Right-BICEP:
          Right --- 結(jié)果是否正確?
          B --- 是否所有的邊界條件都是正確?
          I --- 能查一下反向關(guān)聯(lián)嗎?
          C --- 能用其他手段交叉檢查一下結(jié)果嗎?
          E --- 你是否可以強(qiáng)制錯(cuò)誤條件發(fā)生?
          P --- 是否滿足性能要求?
          編寫測試用例原則,correct邊界條件:
          conformance (一致性)-- 值 是否和預(yù)期的一致。
          Ordering(順序性)--一組值是該有序或者無序的。
          Range(區(qū)間性)--值是否位于合理的最小值和最大值之內(nèi)。
          Reference(引用 、耦合性)--代碼是否引用了一些不在代碼本身控制范圍之內(nèi)的外部資源。
          Existence(存在性)--值是否存在(例如,是否是非null,非0,在一個(gè)集合中等等)。
          Cardinatity(基數(shù)性)--是否恰好有足夠的值?
          Time(相對或者絕對的時(shí)間性)--所有事情的發(fā)生是否是有序的?是否是在正確的時(shí)刻?是否恰好及時(shí)?
          環(huán)境方面的因素:
          內(nèi)存耗光。
          磁盤用滿。
          時(shí)鐘出問題。
          網(wǎng)絡(luò)不可用或者有問題。
          系統(tǒng)過載。
          調(diào)色板顏色數(shù)目有限。
          顯示分辨率過高或者過低。
          0-1-n 原則
          Mock對象:
          真實(shí)對象具有不可確定的行為(產(chǎn)生不可預(yù)測的結(jié)果,如股票行情)
          真實(shí)對象很難被創(chuàng)建
          真實(shí)對象的某些行為很難觸發(fā)(如網(wǎng)絡(luò)錯(cuò)誤)。
          真實(shí)對象令程序的運(yùn)行速度很慢。
          真實(shí)對象有(或者是)用戶界面。
          測試需要詢問真實(shí)對象它是如何被調(diào)用的(例如,測試可能需要驗(yàn)證某個(gè)回調(diào)函數(shù)是否被調(diào)用了)。
          真實(shí)對象實(shí)際上并不存在(當(dāng)需要和其他開發(fā)小組,或者新的硬件系統(tǒng)打交道的時(shí)候,這是一個(gè)普遍問題)。
          借助于mock對象,我們就可以解決上面提到的所有問題。在使用mock對象進(jìn)行測試的時(shí)候,總共有3個(gè)步驟,分別是:
          1. 使用一個(gè)接口來描述這個(gè)對象。
          2. 為產(chǎn)品代碼實(shí)現(xiàn)這個(gè)接口。
          3. 以測試為目的,在mock對象中實(shí)現(xiàn)這個(gè)接口。
          mock提供了所有系統(tǒng)功能的現(xiàn)成接口,所以在更多的時(shí)候,人們可能(也許吧)會(huì)使用它而不是直接調(diào)用諸如System.currentTimeMillis()這樣的東西,而是躲在接口背后擁有了控制一切行為的能力。
          這就是mock對象的全部;偽裝出真實(shí)世界的某些部分,使你可以集中精力測試好自己編寫的代碼。讓我們接下來看看更加復(fù)雜的例子吧。
          好的測試是一個(gè)A-TPIP:
          1. 自動(dòng)化 (Automatic).  調(diào)用測試自動(dòng)化和檢查結(jié)果自動(dòng)化。
          2. 徹底的 (Thorough).
          3. 可重復(fù) (Repeatable).
          4. 獨(dú)立的 (Independent).
          5. 專業(yè)的 (Professional).
          在你發(fā)現(xiàn)bug時(shí),所需要做的就是以下四個(gè)步驟:
          1.驗(yàn)明bug;
          2.編寫一個(gè)將失敗的測試來證明bug的存在。
          3.修正代碼,讓測試通過。
          4.驗(yàn)證所有的測試仍然可以通過(也就是,你沒有在修補(bǔ)的時(shí)候損壞其他的測試)。
          測試的頻率:
          1.編寫新的函數(shù)    編譯并運(yùn)行本地的單元測試。
          2.修正bug    運(yùn)行測試來讓bug現(xiàn)形;修并再次運(yùn)行單元測試。
          3.每次成功編譯之后   運(yùn)行本地的單元測試。
          4.每次對版本控制的簽入   運(yùn)行所有的模塊或者系統(tǒng)的單元測試。
          5. 持續(xù)不斷地   應(yīng)當(dāng)有一臺(tái)專門的機(jī)器來運(yùn)行完整的構(gòu)建和測試。每次都應(yīng)該從頭開始,并且整天自動(dòng)運(yùn)行(要么是周期性的,要么是每當(dāng)有版本控制的簽入行為的時(shí)候)
          編碼和評(píng)審以這樣的順序進(jìn)行:
          1. 編寫test case 和/或測試代碼。
          2. 評(píng)審test case 和/或測試代碼。
          3. 經(jīng)評(píng)審修改test case 和/或測試代碼。
          4. 編寫能通過所有測試的產(chǎn)品代碼。
          5. 評(píng)審產(chǎn)品代碼和測試代碼。
          6. 在每次評(píng)審后,修改測試代碼和產(chǎn)品代碼。
          在某些機(jī)器上測試失敗:
          這究竟是為什么呢?這些機(jī)器之間有什么區(qū)別呢?
          比較明顯的答案可能是下面這些資源的差異:操作系統(tǒng)版本號(hào)、運(yùn)行庫、java運(yùn)行引擎、數(shù)據(jù)庫驅(qū)動(dòng)等。
          統(tǒng)一使用junit 方法的setup 和 tearDown方法。

          posted @ 2013-06-17 09:52 javalinjx 閱讀(325) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 阿图什市| 孟津县| 金山区| 琼结县| 新民市| 营口市| 龙海市| 兴和县| 成武县| 二手房| 南昌县| 无为县| 广元市| 汉源县| 博白县| 射洪县| 济阳县| 东乡县| 呼和浩特市| 建瓯市| 满洲里市| 怀集县| 济阳县| 洪泽县| 望都县| 杂多县| 宝兴县| 东明县| 瑞丽市| 南昌县| 大邑县| 龙海市| 项城市| 阳城县| 遵义市| 马关县| 和林格尔县| 汝城县| 新和县| 凤城市| 修武县|