當前位置:首頁 » 編程語言 » java開源爬蟲

java開源爬蟲

發布時間: 2023-03-06 05:25:33

java網路爬蟲怎麼實現

網路爬蟲是一個自動提取網頁的程序,它為搜索引擎從萬維網上下載網頁,是搜索引擎的重要組成。x0dx0a傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統的一定停止條件。對於垂直搜索來說,聚焦爬蟲,即有針對性地爬取特定主題網頁的爬蟲,更為適合。x0dx0ax0dx0a以下是一個使用java實現的簡單爬蟲核心代碼:x0dx0apublic void crawl() throws Throwable { x0dx0a while (continueCrawling()) { x0dx0a CrawlerUrl url = getNextUrl(); //獲取待爬取隊列中的下一個URL x0dx0a if (url != null) { x0dx0a printCrawlInfo(); x0dx0a String content = getContent(url); //獲取URL的文本信息 x0dx0a x0dx0a //聚焦爬蟲只爬取與主題內容相關的網頁,這里採用正則匹配簡單處理 x0dx0a if (isContentRelevant(content, this.regexpSearchPattern)) { x0dx0a saveContent(url, content); //保存網頁至本地 x0dx0a x0dx0a //獲取網頁內容中的鏈接,並放入待爬取隊列中 x0dx0a Collection urlStrings = extractUrls(content, url); x0dx0a addUrlsToUrlQueue(url, urlStrings); x0dx0a } else { x0dx0a System.out.println(url + " is not relevant ignoring ..."); x0dx0a } x0dx0a x0dx0a //延時防止被對方屏蔽 x0dx0a Thread.sleep(this.delayBetweenUrls); x0dx0a } x0dx0a } x0dx0a closeOutputStream(); x0dx0a}x0dx0aprivate CrawlerUrl getNextUrl() throws Throwable { x0dx0a CrawlerUrl nextUrl = null; x0dx0a while ((nextUrl == null) && (!urlQueue.isEmpty())) { x0dx0a CrawlerUrl crawlerUrl = this.urlQueue.remove(); x0dx0a //doWeHavePermissionToVisit:是否有許可權訪問該URL,友好的爬蟲會根據網站提供的"Robot.txt"中配置的規則進行爬取 x0dx0a //isUrlAlreadyVisited:URL是否訪問過,大型的搜索引擎往往採用BloomFilter進行排重,這里簡單使用HashMap x0dx0a //isDepthAcceptable:是否達到指定的深度上限。爬蟲一般採取廣度優先的方式。一些網站會構建爬蟲陷阱(自動生成一些無效鏈接使爬蟲陷入死循環),採用深度限制加以避免 x0dx0a if (doWeHavePermissionToVisit(crawlerUrl) x0dx0a && (!isUrlAlreadyVisited(crawlerUrl)) x0dx0a && isDepthAcceptable(crawlerUrl)) { x0dx0a nextUrl = crawlerUrl; x0dx0a // System.out.println("Next url to be visited is " + nextUrl); x0dx0a } x0dx0a } x0dx0a return nextUrl; x0dx0a}x0dx0aprivate String getContent(CrawlerUrl url) throws Throwable { x0dx0a //HttpClient4.1的調用與之前的方式不同 x0dx0a HttpClient client = new DefaultHttpClient(); x0dx0a HttpGet httpGet = new HttpGet(url.getUrlString()); x0dx0a StringBuffer strBuf = new StringBuffer(); x0dx0a HttpResponse response = client.execute(httpGet); x0dx0a if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) { x0dx0a HttpEntity entity = response.getEntity(); x0dx0a if (entity != null) { x0dx0a BufferedReader reader = new BufferedReader( x0dx0a new InputStreamReader(entity.getContent(), "UTF-8")); x0dx0a String line = null; x0dx0a if (entity.getContentLength() > 0) { x0dx0a strBuf = new StringBuffer((int) entity.getContentLength()); x0dx0a while ((line = reader.readLine()) != null) { x0dx0a strBuf.append(line); x0dx0a } x0dx0a } x0dx0a } x0dx0a if (entity != null) { x0dx0a nsumeContent(); x0dx0a } x0dx0a } x0dx0a //將url標記為已訪問 x0dx0a markUrlAsVisited(url); x0dx0a return strBuf.toString(); x0dx0a}x0dx0apublic static boolean isContentRelevant(String content, x0dx0aPattern regexpPattern) { x0dx0a boolean retValue = false; x0dx0a if (content != null) { x0dx0a //是否符合正則表達式的條件 x0dx0a Matcher m = regexpPattern.matcher(content.toLowerCase()); x0dx0a retValue = m.find(); x0dx0a } x0dx0a return retValue; x0dx0a}x0dx0apublic List extractUrls(String text, CrawlerUrl crawlerUrl) { x0dx0a Map urlMap = new HashMap(); x0dx0a extractHttpUrls(urlMap, text); x0dx0a extractRelativeUrls(urlMap, text, crawlerUrl); x0dx0a return new ArrayList(urlMap.keySet()); x0dx0a} x0dx0aprivate void extractHttpUrls(Map urlMap, String text) { x0dx0a Matcher m = (text); x0dx0a while (m.find()) { x0dx0a String url = m.group(); x0dx0a String[] terms = url.split("a href=\""); x0dx0a for (String term : terms) { x0dx0a // System.out.println("Term = " + term); x0dx0a if (term.startsWith("http")) { x0dx0a int index = term.indexOf("\""); x0dx0a if (index > 0) { x0dx0a term = term.substring(0, index); x0dx0a } x0dx0a urlMap.put(term, term); x0dx0a System.out.println("Hyperlink: " + term); x0dx0a } x0dx0a } x0dx0a } x0dx0a} x0dx0aprivate void extractRelativeUrls(Map urlMap, String text, x0dx0a CrawlerUrl crawlerUrl) { x0dx0a Matcher m = relativeRegexp.matcher(text); x0dx0a URL textURL = crawlerUrl.getURL(); x0dx0a String host = textURL.getHost(); x0dx0a while (m.find()) { x0dx0a String url = m.group(); x0dx0a String[] terms = url.split("a href=\""); x0dx0a for (String term : terms) { x0dx0a if (term.startsWith("/")) { x0dx0a int index = term.indexOf("\""); x0dx0a if (index > 0) { x0dx0a term = term.substring(0, index); x0dx0a } x0dx0a String s = //" + host + term; x0dx0a urlMap.put(s, s); x0dx0a System.out.println("Relative url: " + s); x0dx0a } x0dx0a } x0dx0a } x0dx0a x0dx0a}x0dx0apublic static void main(String[] args) { x0dx0a try { x0dx0a String url = ""; x0dx0a Queue urlQueue = new LinkedList(); x0dx0a String regexp = "java"; x0dx0a urlQueue.add(new CrawlerUrl(url, 0)); x0dx0a NaiveCrawler crawler = new NaiveCrawler(urlQueue, 100, 5, 1000L, x0dx0a regexp); x0dx0a // boolean allowCrawl = crawler.areWeAllowedToVisit(url); x0dx0a // System.out.println("Allowed to crawl: " + url + " " + x0dx0a // allowCrawl); x0dx0a crawler.crawl(); x0dx0a } catch (Throwable t) { x0dx0a System.out.println(t.toString()); x0dx0a t.printStackTrace(); x0dx0a } x0dx0a}

㈡ 如何使用JAVA編寫爬蟲將爬到的數據存儲到Mysql資料庫

Scrapy依賴於twisted,所以如果Scrapy能用,twisted肯定是已經安裝好了。
抓取到的數據,可以直接丟到MySQL,也可以用Django的ORM模型丟到MySQL,方便Django調用。方法也很簡單,按資料庫的語句來寫就行了,在spiders目錄里定義自己的爬蟲時也可以寫進去。
當然使用pipelines.py是更通用的方法,以後修改也更加方便。你的情況,應該是沒有在Settings.py里定義pipelines,所以Scrapy不會去執行,就不會生成pyc文件了。

㈢ java 實現網路爬蟲用哪個爬蟲框架比較好

有些人問,開發網路爬蟲應該選擇Nutch、Crawler4j、WebMagic、scrapy、WebCollector還是其他的?這里按照我的經驗隨便扯淡一下:

上面說的爬蟲,基本可以分3類:

1.分布式爬蟲:Nutch

2.JAVA單機爬蟲:Crawler4j、WebMagic、WebCollector

3. 非JAVA單機爬蟲:scrapy

第一類:分布式爬蟲

爬蟲使用分布式,主要是解決兩個問題:

1)海量URL管理

2)網速

現在比較流行的分布式爬蟲,是Apache的Nutch。但是對於大多數用戶來說,Nutch是這幾類爬蟲里,最不好的選擇,理由如下:

1)Nutch是為搜索引擎設計的爬蟲,大多數用戶是需要一個做精準數據爬取(精抽取)的爬蟲。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設計的。對精抽取沒有太大的意義。也就是說,用Nutch做數據抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進行二次開發,來使得它適用於精抽取的業務,基本上就要破壞Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新寫一個分布式爬蟲框架了。

2)Nutch依賴hadoop運行,hadoop本身會消耗很多的時間。如果集群機器數量較少,爬取速度反而不如單機爬蟲快。

3)Nutch雖然有一套插件機制,而且作為亮點宣傳。可以看到一些開源的Nutch插件,提供精抽取的功能。但是開發過Nutch插件的人都知道,Nutch的插件系統有多蹩腳。利用反射的機制來載入和調用插件,使得程序的編寫和調試都變得異常困難,更別說在上面開發一套復雜的精抽取系統了。而且Nutch並沒有為精抽取提供相應的插件掛載點。Nutch的插件有隻有五六個掛載點,而這五六個掛載點都是為了搜索引擎服務的,並沒有為精抽取提供掛載點。大多數Nutch的精抽取插件,都是掛載在「頁面解析」(parser)這個掛載點的,這個掛載點其實是為了解析鏈接(為後續爬取提供URL),以及為搜索引擎提供一些易抽取的網頁信息(網頁的meta信息、text文本)。

4)用Nutch進行爬蟲的二次開發,爬蟲的編寫和調試所需的時間,往往是單機爬蟲所需的十倍時間不止。了解Nutch源碼的學習成本很高,何況是要讓一個團隊的人都讀懂Nutch源碼。調試過程中會出現除程序本身之外的各種問題(hadoop的問題、hbase的問題)。

5)很多人說Nutch2有gora,可以持久化數據到avro文件、hbase、mysql等。很多人其實理解錯了,這里說的持久化數據,是指將URL信息(URL管理所需要的數據)存放到avro、hbase、mysql。並不是你要抽取的結構化數據。其實對大多數人來說,URL信息存在哪裡無所謂。

6)Nutch2的版本目前並不適合開發。官方現在穩定的Nutch版本是nutch2.2.1,但是這個版本綁定了gora-0.3。如果想用hbase配合nutch(大多數人用nutch2就是為了用hbase),只能使用0.90版本左右的hbase,相應的就要將hadoop版本降到hadoop 0.2左右。而且nutch2的官方教程比較有誤導作用,Nutch2的教程有兩個,分別是Nutch1.x和Nutch2.x,這個Nutch2.x上寫的是可以支持到hbase 0.94。但是實際上,這個Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之後的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩定(一直在修改)。

所以,如果你不是要做搜索引擎,盡量不要選擇Nutch作為爬蟲。有些團隊就喜歡跟風,非要選擇Nutch來開發精抽取的爬蟲,其實是沖著Nutch的名氣(Nutch作者是Doug Cutting),當然最後的結果往往是項目延期完成。

如果你是要做搜索引擎,Nutch1.x是一個非常好的選擇。Nutch1.x和solr或者es配合,就可以構成一套非常強大的搜索引擎了。如果非要用Nutch2的話,建議等到Nutch2.3發布再看。目前的Nutch2是一個非常不穩定的版本。

㈣ 開源爬蟲框架各有什麼優缺點

首先爬蟲框架有三種

  1. 分布式爬蟲:Nutch

  2. JAVA單機爬蟲:Crawler4j,WebMagic,WebCollector

  3. 非JAVA單機爬蟲:scrapy

第一類:分布式爬蟲

優點:

  1. 海量URL管理

  2. 網速快

缺點:

  1. Nutch是為搜索引擎設計的爬蟲,大多數用戶是需要一個做精準數據爬取(精抽取)的爬蟲。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設計的。對精抽取沒有太大的意義。

  2. 用Nutch做數據抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進行二次開發,來使得它適用於精抽取的業務,基本上就要破壞Nutch的框架,把Nutch改的面目全非。

  3. Nutch依賴hadoop運行,hadoop本身會消耗很多的時間。如果集群機器數量較少,爬取速度反而不如單機爬蟲。

  4. Nutch雖然有一套插件機制,而且作為亮點宣傳。可以看到一些開源的Nutch插件,提供精抽取的功能。但是開發過Nutch插件的人都知道,Nutch的插件系統有多蹩腳。利用反射的機制來載入和調用插件,使得程序的編寫和調試都變得異常困難,更別說在上面開發一套復雜的精抽取系統了。

  5. Nutch並沒有為精抽取提供相應的插件掛載點。Nutch的插件有隻有五六個掛載點,而這五六個掛載點都是為了搜索引擎服務的,並沒有為精抽取提供掛載點。大多數Nutch的精抽取插件,都是掛載在「頁面解析」(parser)這個掛載點的,這個掛載點其實是為了解析鏈接(為後續爬取提供URL),以及為搜索引擎提供一些易抽取的網頁信息(網頁的meta信息、text)

  6. 用Nutch進行爬蟲的二次開發,爬蟲的編寫和調試所需的時間,往往是單機爬蟲所需的十倍時間不止。了解Nutch源碼的學習成本很高,何況是要讓一個團隊的人都讀懂Nutch源碼。調試過程中會出現除程序本身之外的各種問題(hadoop的問題、hbase的問題)。

  7. Nutch2的版本目前並不適合開發。官方現在穩定的Nutch版本是nutch2.2.1,但是這個版本綁定了gora-0.3。Nutch2.3之前、Nutch2.2.1之後的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩定(一直在修改)。

第二類:JAVA單機爬蟲

優點:

  1. 支持多線程。

  2. 支持代理。

  3. 能過濾重復URL的。

  4. 負責遍歷網站和下載頁面。爬js生成的信息和網頁信息抽取模塊有關,往往需要通過模擬瀏覽器(htmlunit,selenium)來完成。

缺點:

設計模式對軟體開發沒有指導性作用。用設計模式來設計爬蟲,只會使得爬蟲的設計更加臃腫。

第三類:非JAVA單機爬蟲

優點:

  1. 先說python爬蟲,python可以用30行代碼,完成JAVA

  2. 50行代碼乾的任務。python寫代碼的確快,但是在調試代碼的階段,python代碼的調試往往會耗費遠遠多於編碼階段省下的時間。

  3. 使用python開發,要保證程序的正確性和穩定性,就需要寫更多的測試模塊。當然如果爬取規模不大、爬取業務不復雜,使用scrapy這種爬蟲也是蠻不錯的,可以輕松完成爬取任務。

缺點:

  1. bug較多,不穩定。

㈤ Java源碼 實現網路爬蟲

給我郵箱~~~~ 看你問好幾天了

㈥ 為什麼常用Python,Java做爬蟲,而不是C#C++等

我用c#,java都寫過爬蟲。區別不大,原理就是利用好正則表達式。只不過是平台問題。後來了解到很多爬蟲都是用python寫的。因為目前對python並不熟,所以也不知道這是為什麼。網路了下結果:

1)抓取網頁本身的介面

相比與其他靜態編程語言,如java,c#,C++,python抓取網頁文檔的介面更簡潔;相比其他動態腳本語言,如perl,shell,python的urllib2包提供了較為完整的訪問網頁文檔的API。(當然ruby也是很好的選擇)

此外,抓取網頁有時候需要模擬瀏覽器的行為,很多網站對於生硬的爬蟲抓取都是封殺的。這是我們需要模擬useragent的行為構造合適的請求,譬如模擬用戶登陸、模擬session/cookie的存儲和設置。在python里都有非常優秀的第三方包幫你搞定,如Requests,mechanize

2)網頁抓取後的處理

抓取的網頁通常需要處理,比如過濾html標簽,提取文本等。python的beautifulsoap提供了簡潔的文檔處理功能,能用極短的代碼完成大部分文檔的處理。

其實以上功能很多語言和工具都能做,但是用python能夠幹得最快,最干凈。Lifeisshort,uneedpython.

Python爬蟲基礎視頻

沖最後一句『Lifeisshort,uneedpython』,立馬在當當上買了本python的書!以前就膜拜過python大牛,一直想學都扯於各種借口遲遲沒有開始。。

py用在linux上很強大,語言挺簡單的。

NO.1快速開發(唯一能和python比開發效率的語言只有rudy)語言簡潔,沒那麼多技巧,所以讀起來很清楚容易。

NO.2跨平台(由於python的開源,他比java更能體現"一次編寫到處運行"

NO.3解釋性(無須編譯,直接運行/調試代碼)

NO.4構架選擇太多(GUI構架方面主要的就有wxPython,tkInter,PyGtk,PyQt。

㈦ GitHub上面有哪些經典的java框架源碼

  • Bazel:來自Google的構建工具,可以快速、可靠地構建代碼。官網

  • Gradle:使用Groovy(非XML)進行增量構建,可以很好地與Maven依賴管理配合工作。官網

  • Buck:Facebook構建工具。官網

  • 位元組碼操作

    編程方式操作位元組碼的開發庫。

  • ASM:通用底層位元組碼操作和分析開發庫。官網

  • Byte Buddy:使用流式API進一步簡化位元組碼生成。官網

  • Byteman:在運行時通過DSL(規則)操作位元組碼進行測試和故障排除。官網

  • Javassist:一個簡化位元組碼編輯嘗試。官網

  • 集群管理

    在集群內動態管理應用程序的框架。

  • Apache Aurora:Apache Aurora是一個Mesos框架,用於長時間運行服務和定時任務(cron job)。官網

  • Singularity:Singularity是一個Mesos框架,方便部署和操作。它支持Web Service、後台運行、調度作業和一次性任務。官網

  • 代碼分析

    測量代碼指標和質量工具。

  • Checkstyle:代碼編寫規范和標准靜態分析工具。官網

  • Error Prone:將常見編程錯誤作為運行時錯誤報告。官網

  • FindBugs:通過位元組碼靜態分析查找隱藏bug。官網

  • jQAssistant:使用基於Neo4J查詢語言進行代碼靜態分析。官網

  • PMD:對源代碼分析查找不良的編程習慣。官網

  • SonarQube:通過插件集成其它分析組件,對過去一段時間內的數據進行統計。官網

  • 編譯器生成工具

    用來創建解析器、解釋器或編譯器的框架。

  • ANTLR:復雜的全功能自頂向下解析框架。官網

  • JavaCC:JavaCC是更加專門的輕量級工具,易於上手且支持語法超前預測。官網

  • 外部配置工具

    支持外部配置的開發庫。

  • config:針對JVM語言的配置庫。官網

  • owner:減少冗餘配置屬性。官網

  • 約束滿足問題求解程序

    幫助解決約束滿足問題的開發庫。

  • Choco:可直接使用的約束滿足問題求解程序,使用了約束規劃技術。官網

  • JaCoP:為FlatZinc語言提供了一個介面,可以執行MiniZinc模型。官網

  • OptaPlanner:企業規劃與資源調度優化求解程序。官網

  • Sat4J:邏輯代數與優化問題最先進的求解程序。官網

  • 持續集成

  • Bamboo:Atlassian解決方案,可以很好地集成Atlassian的其他產品。可以選擇開源許可,也可以購買商業版。官網

  • CircleCI:提供託管服務,可以免費試用。官網

  • Codeship:提供託管服務,提供有限的免費模式。官網

  • fabric8:容器集成平台。官網

  • Go:ThoughtWork開源解決方案。官網

  • Jenkins:支持基於伺服器的部署服務。官網

  • TeamCity:JetBrain的持續集成解決方案,有免費版。官網

  • Travis:通常用作開源項目的託管服務。官網

  • Buildkite: 持續集成工具,用簡單的腳本就能設置pipeline,而且能快速構建,可以免費試用。官網

  • CSV解析

    簡化CSV數據讀寫的框架與開發庫

  • uniVocity-parsers:速度最快功能最全的CSV開發庫之一,同時支持TSV與固定寬度記錄的讀寫。官網

  • 資料庫

    簡化資料庫交互的相關工具。

  • Apache Phoenix:HBase針對低延時應用程序的高性能關系資料庫層。官網

  • Crate:實現了數據同步、分片、縮放、復制的分布式數據存儲。除此之外還可以使用基於SQL的語法跨集群查詢。官網

  • Flyway:簡單的資料庫遷移工具。官網

  • H2:小型SQL資料庫,以可以作為內存資料庫使用著稱。官網

  • HikariCP:高性能JDBC連接工具。官網

  • JDBI:便捷的JDBC抽象。官網

  • Protobuf:Google數據交換格式。官網

  • SBE:簡單二進制編碼,是最快速的消息格式之一。官網

  • Wire:整潔輕量級協議緩存。官網

  • 幫實現依賴翻轉範式的開發庫。官網

  • Apache DeltaSpike:CDI擴展框架。官網

  • Dagger2:編譯時注入框架,不需要使用反射。官網

  • Guice:可以匹敵Dagger的輕量級注入框架。官網

  • HK2:輕量級動態依賴注入框架。官網

  • 開發流程增強工具

    從最基本的層面增強開發流程。

  • ADT4J:針對代數數據類型的JSR-269代碼生成器。官網

  • AspectJ:面向切面編程(AOP)的無縫擴展。官網

  • Auto:源代碼生成器集合。官網

  • DCEVM:通過修改JVM在運行時支持對已載入的類進行無限次重定義。官網

  • HotswapAgent:支持無限次重定義運行時類與資源。官網

  • Immutables:類似Scala的條件類。官網

  • JHipster:基於Spring Boot與AngularJS應用程序的Yeoman源代碼生成器。官網

  • JRebel:無需重新部署,可以即時重新載入代碼與配置的商業軟體。官網

  • Lombok:減少冗餘的代碼生成器。官網

  • Spring Loaded:類重載代理。官網

  • vert.x:多語言事件驅動應用框架。官網

  • 分布式應用

    用來編寫分布式容錯應用的開發庫和框架。

  • Akka:用來編寫分布式容錯並發事件驅動應用程序的工具和運行時。官網

  • Apache Storm:實時計算系統。官網

  • Apache ZooKeeper:針對大型分布式系統的協調服務,支持分布式配置、同步和名稱注冊。官網

  • Hazelcast:高可擴展內存數據網格。官網

  • Hystrix:提供延遲和容錯。官網

  • JGroups:提供可靠的消息傳遞和集群創建的工具。官網

  • Orbit:支持虛擬角色(Actor),在傳統角色的基礎上增加了另外一層抽象。官網

  • Quasar:為JVM提供輕量級線程和角色。官網

  • 分布式資料庫

    對應用程序而言,在分布式系統中的資料庫看起來就像是只有一個數據源。

  • Apache Cassandra:列式資料庫,可用性高且沒有單點故障。官網

  • Apache HBase:針對大數據的Hadoop資料庫。官網

  • Druid:實時和歷史OLAP數據存儲,在聚集查詢和近似查詢方面表現不俗。官網

  • Infinispan:針對緩存的高並發鍵值對數據存儲。官網

  • 發布

    以本機格式發布應用程序的工具。

  • Bintray:發布二進制文件版本控制工具。可以於Maven或Gradle一起配合使用。提供開源免費版本和幾種商業收費版本。官網

  • Central Repository:最大的二進制組件倉庫,面向開源社區提供免費服務。Apache Maven默認使用Central官網Repository,也可以在所有其他構建工具中使用。

  • IzPack:為跨平台部署建立創作工具(Authoring Tool)。官網

  • JitPack:打包GitHub倉庫的便捷工具。可根據需要構建Maven、Gradle項目,發布可立即使用的組件。官網

  • Launch4j:將JAR包裝為輕量級本機Windows可執行程序。官網

  • Nexus:支持代理和緩存功能的二進制管理工具。官網

  • packr:將JAR、資源和JVM打包成Windows、Linux和Mac OS X本地發布文件。官網

  • 文檔處理工具

    處理Office文檔的開發庫。

  • Apache POI:支持OOXML規范(XLSX、DOCX、PPTX)以及OLE2規范(XLS、DOC、PPT)。官網

  • documents4j:使用第三方轉換器進行文檔格式轉換,轉成類似MS Word這樣的格式。官網

  • jOpenDocument:處理OpenDocument格式(由Sun公司提出基於XML的文檔格式)。官網

  • 函數式編程

    函數式編程支持庫。

  • Cyclops:支持一元(Monad)操作和流操作工具類、comprehension(List語法)、模式匹配、trampoline等特性。官網

  • Fugue:Guava的函數式編程擴展。官網

  • Functional Java:實現了多種基礎和高級編程抽象,用來輔助面向組合開發(composition-oriented development)。官網

  • Javaslang:一個函數式組件庫,提供持久化數據類型和函數式控制結構。官網

  • jOOλ:旨在填補Java 8 lambda差距的擴展,提供了眾多缺失的類型和一組豐富的順序流API。官網

  • 游戲開發

    游戲開發框架。

  • jMonkeyEngine:現代3D游戲開發引擎。官網

  • libGDX:全面的跨平台高級框架。官網

  • LWJGL:對OpenGL/CL/AL等技術進行抽象的健壯框架。官網

  • GUI

    現代圖形化用戶界面開發庫。

  • JavaFX:Swing的後繼者。官網

  • Scene Builder:開發JavaFX應用的可視化布局工具。官網

  • 高性能計算

    涵蓋了從集合到特定開發庫的高性能計算相關工具。

  • Agrona:高性能應用中常見的數據結構和工具方法。官網

  • Disruptor:線程間消息傳遞開發庫。官網

  • fastutil:快速緊湊的特定類型集合(Collection)。官網

  • GS Collections:受Smalltalk啟發的集合框架。官網

  • HPPC:基礎類型集合。官網

  • Javolution:實時和嵌入式系統的開發庫。官網

  • JCTools:JDK中缺失的並發工具。官網

  • Koloboke:Hash set和hash map。官網

  • Trove:基礎類型集合。官網

  • High-scale-bli:Cliff Click 個人開發的高性能並發庫官網

  • IDE

    簡化開發的集成開發環境。

  • Eclipse:老牌開源項目,支持多種插件和編程語言。官網

  • IntelliJ IDEA:支持眾多JVM語言,是安卓開發者好的選擇。商業版主要針對企業客戶。官網

  • NetBeans:為多種技術提供集成化支持,包括Java SE、Java EE、資料庫訪問、HTML5

  • Imgscalr:純Java 2D實現,簡單、高效、支持硬體加速的圖像縮放開發庫。官網

  • Picasso:安卓圖片下載和圖片緩存開發庫。官網

  • Thumbnailator:Thumbnailator是一個高質量Java縮略圖開發庫。官網

  • ZXing:支持多種格式的一維、二維條形碼圖片處理開發庫。官網

  • im4java: 基於ImageMagick或GraphicsMagick命令行的圖片處理開發庫,基本上ImageMagick能夠支持的圖片格式和處理方式都能夠處理。官網

  • Apache Batik:在Java應用中程序以SVG格式顯示、生成及處理圖像的工具集,包括SVG解析器、SVG生成器、SVG DOM等模塊,可以集成使用也可以單獨使用,還可以擴展自定義的SVG標簽。官網

  • JSON

    簡化JSON處理的開發庫。

  • Genson:強大且易於使用的Java到JSON轉換開發庫。官網

  • Gson:谷歌官方推出的JSON處理庫,支持在對象與JSON之間雙向序列化,性能良好且可以實時調用。官網

  • Jackson:與GSON類似,在頻繁使用時性能更佳。官網

  • LoganSquare:基於Jackson流式API,提供對JSON解析和序列化。比GSON與Jackson組合方式效果更好。官網

  • Fastjson:一個Java語言編寫的高性能功能完善的JSON庫。官網

  • Kyro:快速、高效、自動化的Java對象序列化和克隆庫。官網

  • JVM與JDK

    目前的JVM和JDK實現。

  • JDK 9:JDK 9的早期訪問版本。官網

  • OpenJDK:JDK開源實現。官網

  • 基於JVM的語言

    除Java外,可以用來編寫JVM應用程序的編程語言。

  • Scala:融合了面向對象和函數式編程思想的靜態類型編程語言。官網

  • Groovy:類型可選(Optionally typed)的動態語言,支持靜態類型和靜態編譯。目前是一個Apache孵化器項目。官網

  • Clojure:可看做現代版Lisp的動態類型語言。官網

  • Ceylon:RedHat開發的面向對象靜態類型編程語言。官網

  • Kotlin:JetBrain針對JVM、安卓和瀏覽器提供的靜態類型編程語言。官網

  • Xtend:一種靜態編程語言,能夠將其代碼轉換為簡潔高效的Java代碼,並基於JVM運行。官網

  • 日誌

    記錄應用程序行為日誌的開發庫。

  • Apache Log4j 2:使用強大的插件和配置架構進行完全重寫。官網

  • kibana:分析及可視化日誌文件。官網

  • Logback:強健的日期開發庫,通過Groovy提供很多有趣的選項。官網

  • logstash:日誌文件管理工具。官網

  • Metrics:通過JMX或HTTP發布參數,並且支持存儲到資料庫。官網

  • SLF4J:日誌抽象層,需要與具體的實現配合使用。官網

  • 機器學習

    提供具體統計演算法的工具。其演算法可從數據中學習。

  • Apache Flink:快速、可靠的大規模數據處理引擎。官網

  • Apache Hadoop:在商用硬體集群上用來進行大規模數據存儲的開源軟體框架。官網

  • Apache Mahout:專注協同過濾、聚類和分類的可擴展演算法。官網

  • Apache Spark:開源數據分析集群計算框架。官網

  • DeepDive:從非結構化數據建立結構化信息並集成到已有資料庫的工具。官網

  • Deeplearning4j:分布式多線程深度學習開發庫。官網

  • H2O:用作大數據統計的分析引擎。官網

  • Weka:用作數據挖掘的演算法集合,包括從預處理到可視化的各個層次。官網

  • QuickML:高效機器學習庫。官網、GitHub

  • 消息傳遞

    在客戶端之間進行消息傳遞,確保協議獨立性的工具。

  • Aeron:高效可擴展的單播、多播消息傳遞工具。官網

  • Apache ActiveMQ:實現JMS的開源消息代理(broker),可將同步通訊轉為非同步通訊。官網

  • Apache Camel:通過企業級整合模式(Enterprise Integration Pattern EIP)將不同的消息傳輸API整合在一起。官網

  • Apache Kafka:高吞吐量分布式消息系統。官網

  • Hermes:快速、可靠的消息代理(Broker),基於Kafka構建。官網

  • JBoss HornetQ:清晰、准確、模塊化,可以方便嵌入的消息工具。官網

  • JeroMQ:ZeroMQ的純Java實現。官網

  • Smack:跨平台XMPP客戶端函數庫。官網

  • Openfire:是開源的、基於XMPP、採用Java編程語言開發的實時協作伺服器。 Openfire安裝和使用都非常簡單,並可利用Web界面進行管理。官網GitHub

  • Spark:是一個開源,跨平台IM客戶端。它的特性支持集組聊天,電話集成和強大安全性能。如果企業內部部署IM使用Openfire+Spark是最佳的組合。官網GitHub

  • Tigase: 是一個輕量級的可伸縮的 Jabber/XMPP 伺服器。無需其他第三方庫支持,可以處理非常高的復雜和大量的用戶數,可以根據需要進行水平擴展。官網

  • 雜項

    未分類其它資源。

  • Design Patterns:實現並解釋了最常見的設計模式。官網

  • Jimfs:內存文件系統。官網

  • Lanterna:類似curses的簡單console文本GUI函數庫。官網

  • LightAdmin:可插入式CRUD UI函數庫,可用來快速應用開發。官網

  • OpenRefine:用來處理混亂數據的工具,包括清理、轉換、使用Web Service進行擴展並將其關聯到資料庫。官網

  • RoboVM:Java編寫原生iOS應用。官網

  • Quartz:強大的任務調度庫.官網

  • 應用監控工具

    監控生產環境中應用程序的工具。

  • AppDynamics:性能監測商業工具。官網

  • JavaMelody:性能監測和分析工具。官網

  • Kamon:Kamon用來監測在JVM上運行的應用程序。官網

  • New Relic:性能監測商業工具。官網

  • SPM:支持對JVM應用程序進行分布式事務追蹤的性能監測商業工具。官網

  • Takipi:產品運行時錯誤監測及調試商業工具。官網

  • 原生開發庫

    用來進行特定平台開發的原生開發庫。

  • JNA:不使用JNI就可以使用原生開發庫。此外,還為常見系統函數提供了介面。官網

  • 自然語言處理

    用來專門處理文本的函數庫。

  • Apache OpenNLP:處理類似分詞等常見任務的工具。官網

  • CoreNLP:斯坦佛CoreNLP提供了一組基礎工具,可以處理類似標簽、實體名識別和情感分析這樣的任務。官網

  • LingPipe:一組可以處理各種任務的工具集,支持POS標簽、情感分析等。官網

  • Mallet:統計學自然語言處理、文檔分類、聚類、主題建模等。官網

  • 網路

    網路編程函數庫。

  • Async Http Client:非同步HTTP和WebSocket客戶端函數庫。官網

  • Grizzly:NIO框架,在Glassfish中作為網路層使用。官網

  • Netty:構建高性能網路應用程序開發框架。官網

  • OkHttp:一個Android和Java應用的HTTP+SPDY客戶端。官網

  • Undertow:基於NIO實現了阻塞和非阻塞API的Web伺服器,在WildFly中作為網路層使用。官網

  • ORM

    處理對象持久化的API。

  • Ebean:支持快速數據訪問和編碼的ORM框架。官網

  • EclipseLink:支持許多持久化標准,JPA、JAXB、JCA和SDO。官網

  • Hibernate:廣泛使用、強健的持久化框架。Hibernate的技術社區非常活躍。官網

  • MyBatis:帶有存儲過程或者SQL語句的耦合對象(Couples object)。官網

  • OrmLite:輕量級開發包,免除了其它ORM產品中的復雜性和開銷。官網

  • Nutz:另一個SSH。官網,Github

  • JFinal:JAVA WEB + ORM框架。官網,Github

  • PDF

    用來幫助創建PDF文件的資源。

  • Apache FOP:從XSL-FO創建PDF。官網

  • Apache PDFBox:用來創建和操作PDF的工具集。官網

  • DynamicReports:JasperReports的精簡版。官網

  • flyingsaucer:XML/XHTML和CSS 2.1渲染器。官網

  • iText:一個易於使用的PDF函數庫,用來編程創建PDF文件。注意,用於商業用途時需要許可證。官網

  • JasperReports:一個復雜的報表引擎。官網

  • 性能分析

    性能分析、性能剖析及基準測試工具。

  • jHiccup:提供平台中JVM暫停的日誌和記錄。官網

  • JMH:JVM基準測試工具。官網

  • JProfiler:商業分析器。官網

  • LatencyUtils:測量和報告延遲的工具。官網

  • VisualVM:對運行中的應用程序信息提供了可視化界面。官網

  • YourKit Java Profiler:商業分析器。官網

  • 響應式開發庫

    用來開發響應式應用程序的開發庫。

  • Reactive Streams:非同步流處理標准,支持非阻塞式反向壓力(backpressure)。官網

  • Reactor:構建響應式快速數據(fast-data)應用程序的開發庫。官網

  • RxJava:通過JVM可觀察序列(observable sequence)構建非同步和基於事件的程序。官網

  • REST框架

    用來創建RESTful 服務的框架。

  • Dropwizard:偏向於自己使用的Web框架。用來構建Web應用程序,使用了Jetty、Jackson、Jersey和Metrics。官網

  • Feign:受Retrofit、JAXRS-2.0和WebSocket啟發的HTTP客戶端連接器(binder)。官網

  • Jersey:JAX-RS參考實現。官網

  • RESTEasy:經過JAX-RS規范完全認證的可移植實現。官網

  • RestExpress:一個Java類型安全的REST客戶端。官網

  • RestX:基於註解處理和編譯時源碼生成的框架。官網

  • Retrofit:類型安全的REST客戶端。官網

  • Spark:受到Sinatra啟發的Java REST框架。官網

  • Swagger:Swagger是一個規范且完整的框架,提供描述、生產、消費和可視化RESTful Web Service。官網

  • Blade:國人開發的一個輕量級的MVC框架. 它擁有簡潔的代碼,優雅的設計。官網

  • 科學計算與分析

    用於科學計算和分析的函數庫。

  • DataMelt:用於科學計算、數據分析及數據可視化的開發環境。官網

  • JGraphT:支持數學圖論對象和演算法的圖形庫。官網

  • JScience:用來進行科學測量和單位的一組類。官網

  • 搜索引擎

    文檔索引引擎,用於搜索和分析。

  • Apache Solr:一個完全的企業搜索引擎。為高吞吐量通信進行了優化。官網

  • Elasticsearch:一個分布式、支持多租戶(multitenant)全文本搜索引擎。提供了RESTful Web介面和無schema的JSON文檔。官網

  • Apache Lucene:是一個開放源代碼的全文檢索引擎工具包,是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。官網

  • 安全

    用於處理安全、認證、授權或會話管理的函數庫。

  • Apache Shiro:執行認證、授權、加密和會話管理。官網

  • Bouncy Castle,涵蓋了從基礎的幫助函數到PGP/SMIME操作。官網:多途加密開發庫。支持JCA提供者(JCA provider)

  • Cryptomator:在雲上進行客戶端跨平台透明加密。官網

  • Keycloak:為瀏覽器應用和RESTful Web Service集成SSO和IDM。目前還處於beta版本,但是看起來非常有前途。官網

  • PicketLink:PicketLink是一個針對Java應用進行安全和身份認證管理的大型項目(Umbrella Project)。官網

  • 序列化

    用來高效處理序列化的函數庫。

  • FlatBuffers:高效利用內存的序列化函數庫,無需解包和解析即可高效訪問序列化數據。官網

  • Kryo:快速、高效的對象圖形序列化框架。官網

  • FST:提供兼容JDK的高性能對象圖形序列化。官網

  • MessagePack:一種高效的二進制序列化格式。官網

  • 應用伺服器

    用來部署應用程序的伺服器。

  • Apache Tomcat:針對Servlet和JSP的應用伺服器,健壯性好且適用性強。官網

  • Apache TomEE:Tomcat加Java EE。官網

  • Jetty:輕量級、小巧的應用伺服器,通常會嵌入到項目中。官網

  • WebSphere Liberty:輕量級、模塊化應用伺服器,由IBM開發。官網

  • WildFly:之前被稱作JBoss,由Red Hat開發。支持很多Java EE功能。官網

  • 模板引擎

    在模板中替換表達式的工具。

  • Apache Velocity:提供HTML頁面模板、email模板和通用開源代碼生成器模板。官網

  • FreeMarker:通用模板引擎,不需要任何重量級或自己使用的依賴關系。官網

  • Handlebars.java:使用Java編寫的模板引擎,邏輯簡單,支持語義擴展(semantic Mustache)。官網

  • Thymeleaf:旨在替換JSP,支持XML文件的工具。官網

  • 測試

    測試內容從對象到介面,涵蓋性能測試和基準測試工具。

  • Apache JMeter:功能性測試和性能評測。官網

  • Arquillian:集成測試和功能行測試平台,集成Java EE容器。官網

  • AssertJ:支持流式斷言提高測試的可讀性。官網

  • Awaitility:用來同步非同步操作的DSL。官網

  • Cucumber:BDD測試框架。官網

  • Gatling:設計為易於使用、可維護的和高性能負載測試工具。官網

  • Hamcrest:可用來靈活創建意圖(intent)表達式的匹配器。官網

  • JMockit:用來模擬靜態、final方法等。官網

  • JUnit:通用測試框架。官網

  • Mockito:在自動化單元測試中創建測試對象,為TDD或BDD提供支持。官網

  • PowerMock: 支持模擬靜態方法、構造函數、final類和方法、私有方法以及移除靜態初始化器的模擬工具。官網

  • REST Assured:為REST/HTTP服務提供方便測試的Java DSL。官網

  • Selenide:為Selenium提供精準的周邊API,用來編寫穩定且可讀的UI測試。官網

  • Selenium:為Web應用程序提供可移植軟體測試框架。官網

  • Spock:JUnit-compatible framework featuring an expressive Groovy-derived specification language.官網兼容JUnit框架,支持衍生的Groovy范的語言。

  • TestNG:測試框架。官網

  • Truth:Google的斷言和命題(proposition)框架。官網

  • Unitils:模塊化測試函數庫,支持單元測試和集成測試。官網

  • WireMock:Web Service測試樁(Stub)和模擬函數。官網

  • 通用工具庫

    通用工具類函數庫。

  • Apache Commons:提供各種用途的函數,比如配置、驗證、集合、文件上傳或XML處理等。官網

  • args4j:命令行參數解析器。官網

  • CRaSH:為運行進行提供CLI。官網

  • Gephi:可視化跨平台網路圖形化操作程序。官網

  • Guava:集合、緩存、支持基本類型、並發函數庫、通用註解、字元串處理、I/O等。官網

  • JADE:構建、調試多租戶系統的框架和環境。官網

  • javatuples:正如名字表示的那樣,提供tuple支持。盡管目前tuple的概念還有留有爭議。官網

  • JCommander:命令行參數解析器。官網

  • Protégé:提供存在論(ontology)編輯器以及構建知識系統的框架。官網

  • 網路爬蟲

    用於分析網站內容的函數庫。

  • Apache Nutch:可用於生產環境的高度可擴展、可伸縮的網路爬蟲。官網

  • Crawler4j:簡單的輕量級網路爬蟲。官網

  • JSoup:刮取、解析、操作和清理HTML。官網

  • Web框架

    用於處理Web應用程序不同層次間通訊的框架。

  • Apache Tapestry:基於組件的框架,使用Java創建動態、強健的、高度可擴展的Web應用程序。官網

  • Apache Wicket:基於組件的Web應用框架,與Tapestry類似帶有狀態顯示GUI。官網

  • Google Web Toolkit:一組Web開發工具集,包含在客戶端將Java代碼轉為JavaScript的編譯器、XML解析器、RCP官網API、JUnit集成、國際化支持和GUI控制項。

  • Grails:Groovy框架,旨在提供一個高效開發環境,使用約定而非配置、沒有XML並支持混入(mixin)。官網

  • Ninja:Java全棧Web開發框架。非常穩固、快速和高效。官網

  • Pippo:小型、高度模塊化的類Sinatra框架。官網

  • Play:使用約定而非配置,支持代碼熱載入並在瀏覽器中顯示錯誤。官網

  • PrimeFaces:JSF框架,提供免費和帶支持的商業版本。包括若干前端組件。官網

  • Ratpack:一組Java開發函數庫,用於構建快速、高效、可擴展且測試完備的HTTP應用程序。官網

  • Spring Boot:微框架,簡化了Spring新程序的開發過程。官網

  • Spring:旨在簡化Java EE的開發過程,提供依賴注入相關組件並支持面向切面編程。官網

  • Vaadin:基於GWT構建的事件驅動框架。使用服務端架構,客戶端使用Ajax。官網

  • Blade:國人開發的一個輕量級的MVC框架. 它擁有簡潔的代碼,優雅的設計。官網

  • 業務流程管理套件

    流程驅動的軟體系統構建。

  • jBPM:非常靈活的業務流程管理框架,致力於構建開發與業務分析人員之間的橋梁。官網

  • Activity:輕量級工作流和業務流程管理框架。官網github

  • 資源

    社區

熱點內容
按鍵腳本優化 發布:2024-05-19 04:59:57 瀏覽:751
怎麼下載壓縮包 發布:2024-05-19 04:47:47 瀏覽:9
二嫂水仙ftp 發布:2024-05-19 04:47:42 瀏覽:160
雲隙伺服器下載 發布:2024-05-19 04:33:22 瀏覽:315
德國C語言 發布:2024-05-19 04:13:40 瀏覽:965
音頻管理器沒有文件夾 發布:2024-05-19 04:13:36 瀏覽:667
qq郵箱埠993伺服器怎麼填 發布:2024-05-19 04:07:05 瀏覽:204
javaapi框架 發布:2024-05-19 04:06:59 瀏覽:365
與存儲結構無關的術語 發布:2024-05-19 04:05:41 瀏覽:500
編譯路由器固件選擇 發布:2024-05-19 03:56:28 瀏覽:42