1. cd yourProject 2. add following to your build.gradle apply plugin: 'eclipse' 3. $ gradle eclipse then you can import code to your celipse
廣告
2015年4月30日 星期四
[gradle]let gradle project can be import by eclipse
[linux] [java] download jdk1.7 64bit on linux and add to environment path
download jdk1.7 64bit for linux 這樣是不行的 wget http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz" \ -O jdk-7-linux-x64.tar.gz 要加header wget --no-cookies \ --no-check-certificate \ --header "Cookie: oraclelicense=accept-securebackup-cookie" \ "http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz" \ -O jdk-7-linux-x64.tar.gz 因為下載頁面有一個需要點選接受的按鈕. 解壓縮: tar -xzf jdk-7-linux-x64.tar.gz -C /opt/ 新增環境變數 export PATH=$PATH:/opt/jdk1.7.0_55/bin export JAVA_HOME=/opt/jdk1.7.0_55/
[searchEngine] install Solr 4.7.2 on linux elasticity
1. download solr $ wget http://www.eu.apache.org/dist/lucene/solr/4.7.2/solr-4.7.2.tgz > solr-4.7.2.tgz 2.解壓縮 $ tar -xzf solr-4.7.2.tgz 3. 將/opt/download/solr-4.7.2/example/webapps/solr.war 複製到自己要deploy的路徑裡並解開 $ cp solr.war /opt/app/solrApp/solr $ jar xvf solr.war #我是在/opt/app/solrApp/solr 底下解開 4. 將/opt/download/solr-4.7.2/example/solr底下的東西 放到/opt/app/solrApp/底下 5. 放所需的solr lib到 tomcat/lib 下 $ sudo cp -r ext/* /opt/apache-tomcat-7.0.61/lib 6. 搬log檔 cp /opt/download/solr-4.7.2/example/resources/log4j.properties classes/ 7. 到/opt/apache-tomcat-7.0.61/conf/Catalina/localhost/ 新增solr.xml $ vim solr.xml 內容如下8. 重啟 $ sudo sh /opt/apache-tomcat-7.0.61/bin/shutdown.sh $ sudo sh /opt/apache-tomcat-7.0.61/bin/startup.sh 9. 給權限 sudo chmod 777 collection1/
2015年4月27日 星期一
[design pattern] [java] Decorator pattern
這種模式讓你不用修改現有的interface,
並且對其新添加功能,
重點在於Employee.java的第七行,
除了複寫walk的method,還添加了
run的method在裡面.
Human.java
Man.java
ManDecorator.java
Employee.java
testDecorator.java
Console
並且對其新添加功能,
重點在於Employee.java的第七行,
除了複寫walk的method,還添加了
run的method在裡面.
Human.java
package com.test.decoratorpattern; public interface Human { void walk(String msg); }
Man.java
package com.test.decoratorpattern; public class Man implements Human{ @Override public void walk(String msg) { System.out.println("class is Man , "+msg); } }
ManDecorator.java
package com.test.decoratorpattern; public class ManDecorator implements Human { protected Human decoratedHuman; public ManDecorator(Human decoratedHuman) { this.decoratedHuman = decoratedHuman; } public void walk(String msg) { decoratedHuman.walk("class is ManDecorator:"+msg); } }
Employee.java
package com.test.decoratorpattern; public class Employee extends ManDecorator { public Employee(Human decoratedHuman) { super(decoratedHuman); // TODO Auto-generated constructor stub } @Override public void walk(String msg) { decoratedHuman.walk(msg); run(decoratedHuman); } private void run(Human decoratedHuman) { System.out.println("class is Employee: Run"); } }
testDecorator.java
package com.test.decoratorpattern; public class testDecorator { public static void main(String[] args) { // TODO Auto-generated method stub Human man = new Man(); man.walk(" man "); Human employee = new Employee(new Man()); employee.walk(" employee "); } }
Console
class is Man , man class is Man , employee class is Employee: Run
[linux] workbench連不到xampp的資料庫但是網頁可以連到phpmyadmin (環境為本機連到vm)
cd /opt/lampp/etc vim vim my.cnf 註解他 #skip-networking 並且 因為我是從本機電腦連到vm的mysql 所以新增一個使用者. 主機位置給他 "%" 也就是任意位置 ,不然預設的root位置是@localhost 這樣本機會連不到vm (因為本機的localhost不等於vm的localhost)
[linux][解決] xampp 裝完後發現連不到他的mysql
法一
發現連不到資料庫 http://192.168.22.148/phpmyadmin/ 做以下步驟: cd到/opt/lampp/phpmyadmin 修改內容config.inc.php $ sudo vim config.inc.php $ cfg['Servers'][$i]['password']='your password' 進入mysql command line $ /opt/lampp/bin/mysql -u root -plewis 更新密碼 UPDATE mysql.user SET Password=PASSWORD('root') WHERE User='root'; 重啟 $ sudo /opt/lampp/lampp start $ sudo /opt/lampp/lampp stop
法二
或者是在xampp安裝完時 輸入以下指令 sudo /opt/lampp/lampp security
2015年4月26日 星期日
[linux] install xampp on ubuntu
以下為錯誤步驟 , 可以跳到下面的正確步驟
step1 add ppa $ sudo add-apt-repository ppa:upubuntu-com/xampp 此時系統會問你要步要加入ppa 到這網址查看內容https://launchpad.net/~upubuntu-com/+archive/ubuntu/xampp 裡面列出一些package ppa : Personal Package Archive 詳細參考http://article.yeeyan.org/view/213582/193672 step2 $ sudo apt-get update step3 $ sudo apt-get install xampp 此方法不行因為缺少套件 所以先移除吧 $ sudo apt-get remove xampp ppa也別忘了移除 $ sudo add-apt-repository --remove ppa:upubuntu-com/xampp
以下為正確步驟
好的我們重來一次 #下載xampp包到指定路徑 $ wget -P /opt/download/xampp64bit.run http://sourceforge.net/projects/xampp/files/XAMPP%20Linux/1.8.3/xampp-linux-x64-1.8.3-2-installer.run/download #添加權限 $ sudo chmod +x xampp64bit.run #執行 $ sudo ./xampp64bit.run #接著會進入安裝畫面,就下一步下一步吧 #啟動 lampp $ sudo /opt/lampp/lampp start #看到以下訊息 Starting XAMPP for Linux 1.8.3-2... XAMPP: Starting Apache...already running. XAMPP: Starting MySQL...ok. XAMPP: Starting ProFTPD...ok. 如果要啟動VM就自行運作 xampp $ sudo vim /etc/rc.local 加入 /opt/lampp/lampp start exit 0 將網頁放到如下位置即可呈現 /opt/lampp/htdocs/
因為我是用putty連到我的vm
所以測試成功與否就從外部的window來看
結果如下:
xampp 帳/密 xampp/lewis
mysql 障/密 root/lewis
連不到sql的話參考這篇
workbench連不到參考這篇
[linux] Install tomcat7.0.61 on ubuntu with "wget"
安裝tomcat
這邊用wget而不用apt-get install
因為用後者會把一些內容放到不同目錄
這樣不好管理,當然每個人習慣不同.
之前有介紹window版本的安裝以及webservice
這邊用wget而不用apt-get install
因為用後者會把一些內容放到不同目錄
這樣不好管理,當然每個人習慣不同.
#下載apache-tomcat-7.0.61.tar.gz $ wget http://ftp.tc.edu.tw/pub/Apache/tomcat/tomcat-7/v7.0.61/bin/apache-tomcat-7.0.61.tar.gz
#解壓縮到/opt/ ,opt/:一般都是放第三方服務的安裝 $ sudo tar -xzf apache-tomcat-7.0.61.tar.gz -C /opt/
#啟動tomcat $ sudo sh /opt/apache-tomcat-7.0.61/bin/startup.sh #會看到如下訊息 Using CATALINA_BASE: /opt/apache-tomcat-7.0.61 Using CATALINA_HOME: /opt/apache-tomcat-7.0.61 Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0.61/temp Using JRE_HOME: /usr Using CLASSPATH: /opt/apache-tomcat-7.0.61/bin/bootstrap.jar:/opt/apache-tomcat-7.0.61/bin/tomcat-juli.jar Tomcat started.
因為我是用putty 連到我的vm 所以測試成功與否就從外部的window來看 結果如下
#接著要修改使用者帳密 $ sudo vim conf/tomcat-users.xml改完就可以管理你的app
#重新啟動 $ sudo sh /opt/apache-tomcat-7.0.61/bin/shutdown.sh $ sudo sh /opt/apache-tomcat-7.0.61/bin/startup.sh
之前有介紹window版本的安裝以及webservice
2015年4月24日 星期五
[linux] crontab 基本使用
這篇主要目的是要說
cronjob執行jar檔 需要給jdk路徑==
WTF
因為看到這篇
http://askubuntu.com/questions/23009/reasons-why-crontab-does-not-work
有時間看一下這篇
http://www.cyberciti.biz/faq/linux-unix-set-java_home-path-variable/
詳細教學可以操考下面兩個網址
https://help.ubuntu.com/community/CronHowto
http://linux.vbird.org/linux_basic/0430cron.php
環境變數可以參考這篇
cronjob執行jar檔 需要給jdk路徑==
WTF
因為看到這篇
http://askubuntu.com/questions/23009/reasons-why-crontab-does-not-work
有時間看一下這篇
http://www.cyberciti.biz/faq/linux-unix-set-java_home-path-variable/
詳細教學可以操考下面兩個網址
https://help.ubuntu.com/community/CronHowto
http://linux.vbird.org/linux_basic/0430cron.php
環境變數可以參考這篇
crontab 設定 edit cronjob $ crontab -e list cronjob $ crontab -l 例如 * 19-22 * * * cd /opt/acer/cronjob/channelData;export PATH=$PATH:/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin; java -cp "./*:./lib/*" com.acer.control.ChnelDataFlowHandler ibobar y y 3 y y y twn 0 "" restart cron $ sudo /etc/init.d/cron restart check log $ cat /var/log/syslog
[linux] export ,設定環境變數 |Environment variable
#列出目前所有變數 export #添加變數 export PATH=$PATH:/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin 此時打一次exoprt 會發現已經添加 #修改profile vim /ext/profile #加入 export PATH=$PATH:/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin #修改.bashrc cd ~ vim .bashrc export PATH=$PATH:/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin 立即生效: . ~/.bashrc #測試 echo $PATH
2015年4月23日 星期四
export jar檔時出現 "eclipse class file on classpath not found or not accessible"
因為專案裡面有mark掉某java檔的整個
內容(包含class name),
因為程式碼全部被mark.
這樣bin下面會產不出class檔而導致錯誤,
所以不能將class name給mark掉.
結論:
這不知道是eclipse本身的bug又或者是java本來就這樣規定?
內容(包含class name),
因為程式碼全部被mark.
這樣bin下面會產不出class檔而導致錯誤,
所以不能將class name給mark掉.
結論:
這不知道是eclipse本身的bug又或者是java本來就這樣規定?
[linux] vim 常用指令 |vim common command
用putty連linux時,常要改一些設定檔,crronjob, shell script等等
用vim來改比較快也比較方便.
這邊列出一些常用指令
用vim來改比較快也比較方便.
這邊列出一些常用指令
#首先創建一個文字檔 vim filename.txt #進入編輯模式 i #離開編輯模式 esc #離開 shift + : q #離開並存檔 wq #下列為一般模式下 #左下上右 hjkl #進階 一次往下5行 5j #螢幕向下/上 一頁 ctrl + f/b #移到該行最前面 0 #尋找 /keyword #刪除整列 dd #複製 yy #貼上 p #復原 u
2015年4月21日 星期二
[linux] 將指令的內容輸出到某檔案
use ">"
date +%Y%m%d > backcronjob.txt lewis@ubuntu:/opt$ cat backcronjob.txt 20150318 lewis@ubuntu:/opt$ ls -l /opt/app/abStore_data/ > backcronjob.txt lewis@ubuntu:/opt$ cat backcronjob.txt total 4 drwxr-xr-x 4 root root 4096 Mar 18 13:14 data
2015年4月20日 星期一
[linux] Run jar on linux with command line
here is java test code
package testJava; public class testLinuxArg { public static void main(String[] args) { System.out.println("args lenght:" + args.length); for (int i = 0; i < args.length; i++) { System.out.println("args:" + i + " is : " + args[i] + " type is " + args[i].getClass() + " length is " + args[i].length()); } } }export as jar,
put it to your linux
run jar on linux
java -cp "the lib you need" fileName ex: java -cp "./*:./lib/*" testJava.testLinuxArg "1" "" "3" $(pwd)
2015年4月16日 星期四
[git] The step of release production code to remote
#project一開始會有兩條branch, #master(主要開發用) & release(上版用) #開branch git branch release #push release這個分支 #ex:git push origin release #每次要上版 1.merge master to release git merge release maste 2.push to remote git push 3.(add tag 會add到當前你在的分支) git tag $release-versioNname #ex:git tag v1.1.1 git push $repository_name $release-versioNname #ex:git push origin v1.1.1
2015年4月13日 星期一
[java] read/write properties file | 讀/寫 properties 檔
package testJava; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import java.util.Properties; public class testProperties { private static String propertiesName = "server.properties"; private static String serverAddr = ""; private static Integer serverPort = 0; private static Integer threadCnt = 0; public static void main(String[] args) { System.out.println("before load Properties"); System.out.println("serverAddr:"+serverAddr+"\nserverPort:"+serverPort+"\nthreadCnt:"+threadCnt); System.out.println("after load Properties"); loadParams(); System.out.println("serverAddr:"+serverAddr+"\nserverPort:"+serverPort+"\nthreadCnt:"+threadCnt); System.out.println("=================="); System.out.println("save value to Properties"); System.out.println("serverAddr:"+serverAddr+"\nserverPort:"+serverPort+"\nthreadCnt:"+threadCnt); serverAddr = "192.168.0.0"; serverPort = 4543; threadCnt = 111; saveParamChanges(); System.out.println("load value form Properties"); loadParams(); System.out.println("serverAddr:"+serverAddr+"\nserverPort:"+serverPort+"\nthreadCnt:"+threadCnt); System.out.println("=================="); System.out.println("print all content"); printThemAll(); } public static void loadParams() { Properties props = new Properties(); InputStream is = null; // First try loading from the current directory try { is = new FileInputStream(propertiesName); props.load(is); serverAddr = props.getProperty("ServerAddress"); serverPort = new Integer(props.getProperty("ServerPort")); threadCnt = new Integer(props.getProperty("ThreadCount")); } catch (Exception e) { System.out.println(e.getMessage().toString()); }finally { if (is != null) { try { is.close(); } catch (Exception e) { System.out.println(e.getMessage().toString()); } } } } public static void saveParamChanges() { OutputStream out = null; Properties props = new Properties(); try { props.setProperty("ServerAddress", serverAddr); props.setProperty("ServerPort", ""+serverPort); props.setProperty("ThreadCount", ""+threadCnt); out = new FileOutputStream(propertiesName); props.store(out, "This is an optional header comment string"); } catch (Exception e ) { System.out.println(e.getMessage().toString()); }finally { if (out != null) { try { out.close(); } catch (Exception e) { System.out.println(e.getMessage().toString()); } } } } private static void printThemAll() { Properties prop = new Properties(); InputStream input = null; try { String filename = propertiesName; input = new FileInputStream(propertiesName); prop.load(input); if (input == null) { System.out.println("Sorry, unable to find " + filename); return; } Enumeration e = prop.propertyNames(); while (e.hasMoreElements()) { String key = (String) e.nextElement(); String value = prop.getProperty(key); System.out.println("Key : " + key + ", Value : " + value); } } catch (Exception e) { System.out.println(e.getMessage().toString()); } finally { if (input != null) { try { input.close(); } catch (IOException e) { System.out.println(e.getMessage().toString()); } } } } }
console
before load Properties serverAddr: serverPort:0 threadCnt:0 after load Properties server.properties (系統找不到指定的檔案。) serverAddr: serverPort:0 threadCnt:0 ================== save value to Properties serverAddr: serverPort:0 threadCnt:0 load value form Properties serverAddr:192.168.0.0 serverPort:4543 threadCnt:111 ================== print all content Key : ServerPort, Value : 4543 Key : ServerAddress, Value : 192.168.0.0 Key : ThreadCount, Value : 111
2015年4月9日 星期四
[git] clone specific version & push branch to remote
事情是這樣的.
每次上板前都應該branch一個版本出來
並且push 到server.
樣樣revert比較快.
clone specific version from remote
push branch to remote
每次上板前都應該branch一個版本出來
並且push 到server.
樣樣revert比較快.
clone specific version from remote
$ git clone $URL $ git reset --hard $SHA1 EX:git reset --hard 5201870025b316252008882aecbd2e2fd8d68787 To again go back to the most recent commit $ git pull
push branch to remote
$ git remote -v shows remote repository name and url //基於此版本 branch 一個 版本出來 $ git branch branch_name 切換 branch $ git check branch_name push branch $ git push repository_name branch_name
2015年4月7日 星期二
[design pattern] [java] Chain of Responsibility Pattern
責任鏈模式在物件導向程式設計裡是一種軟體設計模式,
它包含了一些命令對象和一系列的處理對象。
每一個處理對象決定它能處理哪些命令對象,
它也知道如何將它不能處理的命令對象傳遞給該鏈中的下一個處理對象。
該模式還描述了往該處理鏈的末尾添加新的處理對象的方法
AbstractLogger.java
FileLogger.java
ConsoleLogger.java
ErrorLogger.java
ChainPatterntest.java
console
它包含了一些命令對象和一系列的處理對象。
每一個處理對象決定它能處理哪些命令對象,
它也知道如何將它不能處理的命令對象傳遞給該鏈中的下一個處理對象。
該模式還描述了往該處理鏈的末尾添加新的處理對象的方法
AbstractLogger.java
package com.test.chainofresponsibilitypattern; public abstract class AbstractLogger { public static int INFO = 1; public static int DEBUG = 2; public static int ERROR = 3; protected int level; // next element in chain or responsibility protected AbstractLogger nextLogger; public void setNextLogger(AbstractLogger nextLogger) { this.nextLogger = nextLogger; } public void logMessage(int level, String message) { System.out.println("current class :"+this.getClass().getSimpleName()+" "+ "current(this).level : " + this.level + " " + "level(from function) = "+ level); if (this.level <= level) { write(message); } if (nextLogger != null) { //find out whether there have "next" nextLogger.logMessage(level, message); } } abstract protected void write(String message); }
FileLogger.java
package com.test.chainofresponsibilitypattern; public class FileLogger extends AbstractLogger { public FileLogger(int level) { this.level = level; } @Override protected void write(String message) { System.out.println("File Logger: " + message); } }
ConsoleLogger.java
package com.test.chainofresponsibilitypattern; public class ConsoleLogger extends AbstractLogger { public ConsoleLogger(int level) { this.level = level; } @Override protected void write(String message) { System.out.println("Console Logger: " + message); } }
ErrorLogger.java
package com.test.chainofresponsibilitypattern; public class ErrorLogger extends AbstractLogger { public ErrorLogger(int level) { this.level = level; } @Override protected void write(String message) { System.out.println("Error Logger: " + message); } }
ChainPatterntest.java
package com.test.chainofresponsibilitypattern; public class ChainPatterntest { private static AbstractLogger getChainOfLoggers(){ AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR); AbstractLogger fileLogger = new FileLogger(AbstractLogger.DEBUG); AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO); errorLogger.setNextLogger(fileLogger); fileLogger.setNextLogger(consoleLogger); return errorLogger; //order is important //return the first object you set } public static void main(String[] args) { AbstractLogger loggerChain = getChainOfLoggers(); loggerChain.logMessage(AbstractLogger.INFO, "This is an information."); System.out.println("======================"); loggerChain.logMessage(AbstractLogger.DEBUG, "This is an debug information."); System.out.println("======================"); loggerChain.logMessage(AbstractLogger.ERROR, "This is an error information."); } }
console
current class :ErrorLogger current(this).level : 3 level(from function) = 1 current class :FileLogger current(this).level : 2 level(from function) = 1 current class :ConsoleLogger current(this).level : 1 level(from function) = 1 Console Logger: This is an information. ====================== current class :ErrorLogger current(this).level : 3 level(from function) = 2 current class :FileLogger current(this).level : 2 level(from function) = 2 File Logger: This is an debug information. current class :ConsoleLogger current(this).level : 1 level(from function) = 2 Console Logger: This is an debug information. ====================== current class :ErrorLogger current(this).level : 3 level(from function) = 3 Error Logger: This is an error information. current class :FileLogger current(this).level : 2 level(from function) = 3 File Logger: This is an error information. current class :ConsoleLogger current(this).level : 1 level(from function) = 3 Console Logger: This is an error information.
2015年4月5日 星期日
[git] diff : add . & add -u & add -A
先新增三個檔案當作測試用 after_modify.txt new_add.txt deleted.txt 並且都git add ========================== git rm deleted.txt 修改after_modify.txt內容 此時看status如下
git add . 結果如下: 會發現 deleted.txt 沒有近來
========================== git reset ==========================
git add -u 結果如下: 圖 會發現 new_add.txt 沒有近來
========================== git reset ==========================
git add -A 結果如下: 全都進來了
總結一下:
git add -A :全都進到stages git add . :git rm 的會沒有 git add -u :新增的檔案沒有
[git] 基本git使用 tutirial 2 (branch, merge)
gitk --all //圖形化介面 git branch //列出目前所有branch git checkout -b issue513 // 由現在的環境為基礎, 建立新的 branch git checkout issue513 //切換branch
在 branch新增 檔案 並且 add , then commit.
切回 master git checkout master merge: git merge issue513
訂閱:
文章 (Atom)