日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java构建工具, ZeroC ICE, word2vec

發(fā)布時(shí)間:2023/12/20 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java构建工具, ZeroC ICE, word2vec 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

https://antkillerfarm.github.io/

Java構(gòu)建工具

構(gòu)建工具的意義在于,提供一種獨(dú)立于IDE的軟件構(gòu)建方式。而且通常來(lái)說(shuō),構(gòu)建工具更適合特大項(xiàng)目的構(gòu)建。比如,即使是以功能強(qiáng)大著稱的Visual Studio,也提供nmake用以處理特大項(xiàng)目。

常用的Java構(gòu)建工具主要有:Ant、Maven、Gradle。

Ant

Ant作為最早的Java構(gòu)建工具,使用最為廣泛,一經(jīng)使用即取代了之前的IDE工程文件。

PS:那個(gè)時(shí)代最著名的Java IDE估計(jì)要算Borland的JBuilder了。

Ant使用XML語(yǔ)言格式的配置文件,并可結(jié)合Ivy用以處理網(wǎng)絡(luò)式的依賴管理。

Ant入門(mén)教程:

http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html

從設(shè)計(jì)思想來(lái)看,Ant非常類似make。除了建立依賴關(guān)系樹(shù)之外,其他方面完全不限制編寫(xiě)者的發(fā)揮。因此,Ant的自由度很高,但缺點(diǎn)就是編寫(xiě)難度和make也類似。

代碼示例:

https://github.com/antkillerfarm/antkillerfarm_crazy/tree/master/java_build/ant

Maven

Maven仍舊使用XML作為配置文件格式,但使用內(nèi)置規(guī)則簡(jiǎn)化腳本的編寫(xiě)。其配置文件一般叫做pom.xml。

Maven最大的優(yōu)點(diǎn)是,具備從網(wǎng)絡(luò)上自動(dòng)下載依賴的能力。比如,最常用的maven repository:

https://repository.apache.org/

http://ebr.springsource.com/repository/app/

本地maven repository通常在~/.m2/repository/下,某些直接下載失敗的包,可手動(dòng)安裝到該路徑下。

Maven入門(mén)教程:

http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html

Maven的缺點(diǎn)是規(guī)則的力量過(guò)于強(qiáng)大,對(duì)于規(guī)則覆蓋不了的情況,很難處理。但好在多數(shù)項(xiàng)目并沒(méi)有那么復(fù)雜的情況。

針對(duì)規(guī)則的復(fù)雜,Maven提出了模板的概念,用以簡(jiǎn)化操作。命令是:

mvn archetype:generate

可選的模板參見(jiàn):

https://maven.apache.org/guides/introduction/introduction-to-archetypes.html

代碼示例:

https://github.com/antkillerfarm/antkillerfarm_crazy/tree/master/java_build/maven

常用maven命令

命令含義
mvn compile編譯代碼
mvn package打包操作
mvn exec:java執(zhí)行程序
mvn exec:exec執(zhí)行程序
mvn clean清理程序

使用mvn exec:java,還是mvn exec:exec,一般根據(jù)pom.xml中定義的目標(biāo)來(lái)確定,后者的語(yǔ)法更靈活,功能也更強(qiáng)。

插件和依賴模塊的版本控制

Maven允許同一個(gè)軟件包的不同版本安裝在同一臺(tái)PC上。比如程序A可以使用spring v3.1,而程序B可以使用spring v3.2。

它的實(shí)現(xiàn)方式是:同一個(gè)軟件包的不同版本,放在不同的路徑下。

插件和依賴模塊一般使用version標(biāo)簽定義所使用的版本。版本標(biāo)簽在大多數(shù)示例中一般是固定值,這樣可以確保部署的一致性。

然而對(duì)于一些簡(jiǎn)單的demo,特別是比較老的demo來(lái)說(shuō),老舊的版本標(biāo)簽意味著,需要從repo中下載老的庫(kù),速度慢且占用空間大。

因此,在開(kāi)發(fā)用的機(jī)器上,通常需要將同一類應(yīng)用的各個(gè)插件和依賴模塊配置為同一版本,以節(jié)省空間。

插件和依賴模塊的版本號(hào),可用以下網(wǎng)站查詢:

https://mvnrepository.com/

此外,還可以用range dependency機(jī)制,直接使用最新版本。示例如下:

<version>[2.40.0,)</version>

這里的[2.40.0,)表示取2.40.0以上最新版本。注意只有依賴模塊可以使用這種語(yǔ)法,插件是不行的。

更換mirror

Maven的官方軟件倉(cāng)庫(kù)URL為:

http://repo.maven.apache.org/maven2

然而這個(gè)網(wǎng)址有的時(shí)候會(huì)比較慢,這時(shí)就需要更換更快的mirror。其方法為:

修改${user.home}/.m2/settings.xml。

注意這個(gè)配置文件只對(duì)該repo生效,如果想全局有效的話,可修改/etc/maven/settings.xml。

<mirrors><mirror><id>UK</id><name>UK Central</name><url>http://uk.maven.org/maven2</url><mirrorOf>central</mirrorOf></mirror> </mirrors>

其他mirror有:

http://uk.maven.org/maven2

http://repo.maven.org/maven2/

http://repo1.maven.org/maven2/

http://repo2.maven.org/maven2/

http://maven.aliyun.com/nexus/content/groups/public

阿里云的mirror大概是2016年7、8月份推出的,速度非常快。

本來(lái)國(guó)內(nèi)的OSChina有一個(gè)Maven mirror。但現(xiàn)在已經(jīng)不可用了。

http://jcenter.bintray.com

jcenter是JFrog的產(chǎn)品,后者專注于maven部署,因此該網(wǎng)站擁有的jar最全且新,速度也不慢。

Eclipse工程轉(zhuǎn)為Maven工程

選擇項(xiàng)目,右鍵點(diǎn)擊->Configure->Convert to Maven Project

Maven引用本地jar

大多數(shù)情況下,Maven并不需要處理jar的引用問(wèn)題,項(xiàng)目所需的jar以及相應(yīng)的依賴,會(huì)自動(dòng)從中心軟件倉(cāng)庫(kù)中下載至本地。

那么對(duì)于中心軟件倉(cāng)庫(kù)中沒(méi)有的jar,Maven是怎么處理的呢?

這里主要有3種方法:

1.將jar包安裝到本地repository中。

mvn install:install-file -Dfile=my-jar.jar -DgroupId=org.richard -DartifactId=my-jar -Dversion=1.0 -Dpackaging=jar

這種方法的好處是安裝之后的操作,和外部jar相同。但缺點(diǎn)是:部署的時(shí)候,每臺(tái)機(jī)器都要安裝一次。

2.使用system scope。

<dependencies><dependency><groupId>org.richard</groupId><artifactId>my-jar</artifactId><version>1.0</version><scope>system</scope><systemPath>${project.basedir}/lib/my-jar.jar</systemPath></dependency></dependencies>

這種方法下,jar可以和代碼放在同一個(gè)文件夾下,以便分發(fā)。然而這種做法不是官方推薦的做法,在執(zhí)行時(shí),需要自己處理classpath的問(wèn)題。

這里吐槽一下Java。Java的classpath選項(xiàng)中,如果指定的jar不止一個(gè),那么兩個(gè)jar之間需用符號(hào)分隔。這個(gè)分隔符在Windows上是;,而在Linux上是:。居然連這一點(diǎn)都沒(méi)統(tǒng)一,實(shí)在無(wú)語(yǔ)。

uber-jar

uber在德語(yǔ)中,表示above或over。uber-jar實(shí)際上就是將程序的依賴也打包,而生成的jar。例如maven中,可用:

mvn uberjar

生成uber-jar。

此外,maven shade plugin和dependency-reduced-pom.xml實(shí)際上也與uber-jar有關(guān)。

搭建Maven私服

Artifactory可用于搭建團(tuán)隊(duì)內(nèi)部的Maven私服。官網(wǎng):

https://www.jfrog.com/open-source/

正常運(yùn)行項(xiàng)目的maven命令,向artifactory索求jar。如果artifactory已經(jīng)下載了就會(huì)直接返回給你,還沒(méi)有的就會(huì)去那幾個(gè)repo官方站下載。

參考:

http://blog.csdn.net/calvinxiu/article/details/1713323

Gradle

XML作為配置文件格式,主要有兩個(gè)缺點(diǎn):

1.各種標(biāo)記占用的空間較大,不簡(jiǎn)潔。有用的信息淹沒(méi)在各種標(biāo)記中,反而降低了配置文件的可讀性。

2.XML本身的樹(shù)狀結(jié)構(gòu),對(duì)于條件編譯(例如if分支)的情況,沒(méi)有什么好的語(yǔ)法組織形式。

針對(duì)以上問(wèn)題,Gradle使用Groovy語(yǔ)言作為配置文件格式。它自2012年誕生以來(lái),獲得了快速普及,尤其是Google采用Gradle作為Android應(yīng)用的默認(rèn)構(gòu)建工具。

Gradle的設(shè)計(jì)思想已經(jīng)脫離了make的范疇。make腳本也好,XML也好,都不是通用程序語(yǔ)言,無(wú)論設(shè)置再多的規(guī)則,也總有滿足不了需求的時(shí)候。因此,Gradle使用Groovy這種通用程序語(yǔ)言來(lái)提供靈活性,同時(shí)使用plugin,尤其是官方提供的plugin,來(lái)設(shè)定規(guī)則。就好比是C語(yǔ)言+標(biāo)準(zhǔn)庫(kù),這樣的組合夠強(qiáng)吧。

premake實(shí)際上也是類似的設(shè)計(jì)思路。

代碼示例:

https://github.com/antkillerfarm/antkillerfarm_crazy/tree/master/java_build/gradle

官網(wǎng):

https://gradle.org/

教程:

https://spring.io/guides/gs/gradle/

Gradle Wrapper

Gradle Wrapper能夠讓你的工程在沒(méi)有安裝Gradle的機(jī)器上編譯。

1.使用gradle wrapper命令生成gradlew命令。

2../gradlew run

類似的,maven也有一個(gè)Wrapper,有些工程里的mvnw或mvnw.cmd,就是這個(gè)Wrapper的文件。

ZeroC ICE

我在研究生時(shí)代,研究過(guò)CORBA、EJB、COM這樣的中間件技術(shù)。然而工作以后,再?zèng)]有機(jī)會(huì)使用。平時(shí)偶爾關(guān)注,也只是曉得CORBA從來(lái)沒(méi)有流行過(guò),EJB在Struts、Hibernate、Spring等框架的圍攻下,用者寥寥。直到最近,因?yàn)轫?xiàng)目需要接觸到ZeroC的ICE框架。

ICE框架的官網(wǎng)地址:

https://zeroc.com/downloads/ice

安裝:

wget https://zeroc.com/download/GPG-KEY-zeroc-release sudo apt-key add GPG-KEY-zeroc-release sudo apt-add-repository "deb http://zeroc.com/download/apt/ubuntu16.04 stable main" sudo apt-get update sudo apt-get install zeroc-ice-all-runtime zeroc-ice-all-dev sudo apt-get install libssl-dev pip install zeroc-ice

多語(yǔ)言demo:

https://github.com/zeroc-ice/ice-demos

注意demo的master分支是開(kāi)發(fā)分支,好多代碼都是有問(wèn)題的,請(qǐng)切換到正在使用版本的分支,例如:

git checkout 3.6

Hprose

Hprose是ZeroC ICE的一個(gè)競(jìng)爭(zhēng)者,由國(guó)內(nèi)某高手打造,支持的語(yǔ)言超過(guò)20種,堪稱最全。不過(guò)貌似沒(méi)什么大公司用啊。。。

其標(biāo)榜的無(wú)需生成樁代碼的優(yōu)點(diǎn),相比ZeroC ICE的老版本來(lái)說(shuō),的確是個(gè)進(jìn)步。但目前的ZeroC ICE 3.6版本,也同樣提供了類似的功能。這或者也是Hprose一直火不起來(lái)的原因。

官網(wǎng):

http://hprose.com/

Github:

https://github.com/hprose

word2vec

word2vec是Google于2013年開(kāi)源推出的一個(gè)用于獲取word vector的工具包。作者是Tomas Mikolov。

Github:

https://github.com/tmikolov/word2vec

注:Tomas Mikolov,捷克布爾諾科技大學(xué)博士。先后在Google、Facebook擔(dān)任研究員。

word2vec包中還有一個(gè)word2phrase的程序,這個(gè)程序可以根據(jù)統(tǒng)計(jì)信息由單詞生成短語(yǔ)。考慮到中文的字和詞之間的關(guān)系,實(shí)際上也可以用它來(lái)進(jìn)行無(wú)先驗(yàn)數(shù)據(jù)的分詞。

注:NLP中的先驗(yàn)數(shù)據(jù),最出名的當(dāng)屬分詞詞典。除此之外,還包括HMM的轉(zhuǎn)移矩陣表等。

其一般方法為:

1.對(duì)原始語(yǔ)料按字切分,以空格分隔,相當(dāng)于認(rèn)為一個(gè)字就是一個(gè)詞,即單字成詞

2.使用word2phrase**組字成詞**。

time ./word2phrase -train 1.txt -output 2.txt -threshold 100 -debug 2

3.由于word2phrase最多只考慮到2-gram。因此,對(duì)于超過(guò)3個(gè)字以上的詞語(yǔ),需要迭代執(zhí)行word2phrase。

我以金庸的小說(shuō)為語(yǔ)料進(jìn)行測(cè)試。從結(jié)果來(lái)看,這種方法對(duì)于人名、地名、武功招式名等專有名詞,分詞效果較好。但對(duì)于具有語(yǔ)法結(jié)構(gòu)的句子,分詞效果較差。比如“那人”其實(shí)是兩個(gè)單字詞,但卻被word2phrase認(rèn)為是一個(gè)雙字詞。

./word2vec -train resultbig.txt -output vectors.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1

./distance vectors.bin

訓(xùn)練之后的結(jié)果文件中,保存著每個(gè)詞的向量。可將binary選項(xiàng)設(shè)為0,來(lái)查看相應(yīng)結(jié)果的明文。

明文和二進(jìn)制數(shù)據(jù)之間的轉(zhuǎn)換可使用gensim工具,參見(jiàn):

https://github.com/antkillerfarm/antkillerfarm_crazy/blob/master/python/ml/nlp/hello_gensim.py

參考:

http://wei-li.cnblogs.com/p/word2vec.html

文本深度表示模型Word2Vec

http://www.cnblogs.com/wowarsenal/p/3293586.html

用中文把玩Google開(kāi)源的Deep-Learning項(xiàng)目word2vec

http://www.jianshu.com/p/05800a28c5e4

使用word2vec訓(xùn)練wiki中英文語(yǔ)料庫(kù)

總結(jié)

以上是生活随笔為你收集整理的Java构建工具, ZeroC ICE, word2vec的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。