在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 物聯(lián)網(wǎng)/ 介紹這個Gradle項(xiàng)目
依賴管理實(shí)戰(zhàn)
配置遠(yuǎn)程倉庫
安裝Gradle
簡介
項(xiàng)目自動化簡介
配置子項(xiàng)目
Gradle強(qiáng)大的特性
自動化測試
簡介
掌握構(gòu)建生命周期
使用命令行操作
構(gòu)建Java項(xiàng)目
管理任務(wù)
構(gòu)建工具
連續(xù)傳遞的特性
用Gradle開發(fā)Web項(xiàng)目
聲明依賴
構(gòu)建塊
簡介
測試Java應(yīng)用
java構(gòu)建工具
為什么選擇Gradle
拆分項(xiàng)目文件
單元測試
多項(xiàng)目打包
Gradle 起步
介紹這個Gradle項(xiàng)目
簡介
自定義腳本
Gradle包裝器
簡要概述依賴管理
項(xiàng)目模塊化

介紹這個Gradle項(xiàng)目

第一個Gradle項(xiàng)目

這一章將通過一個例子來介紹Gradle的強(qiáng)大特性,你將從中學(xué)到怎么用Gradle的標(biāo)準(zhǔn)插件來引導(dǎo)、配置和運(yùn)行你的應(yīng)用,這章結(jié)束的時(shí)候你應(yīng)該對Gradle的工作機(jī)制有個清晰的認(rèn)識。

The To Do Application

我們經(jīng)常需要同時(shí)管理多個項(xiàng)目,有時(shí)候會發(fā)現(xiàn)多個項(xiàng)目很難維護(hù)達(dá)到了難以控制的地步,為了擺脫這個困惑,我們可以維護(hù)一個to-do列表,顯然你可以把你所有要完成的任務(wù)寫在一張紙上,當(dāng)時(shí)如果能夠隨時(shí)隨地查詢你要完成的任務(wù)豈不更方便?

任務(wù)管理的情形

現(xiàn)在你知道了你的最終目的,每一個任務(wù)管理系統(tǒng)都是由一系列的任務(wù)組成的,任務(wù)通常有一個標(biāo)題,任務(wù)可以添加到任務(wù)列表中,可以標(biāo)記任務(wù)的完成狀態(tài)以及刪除任務(wù),如下圖所示:

http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag9.png" alt="" /> http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag10.png" alt="" />

實(shí)現(xiàn)用戶交互功能

我們發(fā)現(xiàn)這個TO DO 應(yīng)用包含典型的創(chuàng)建、讀取、更新、刪除操作(CRUD),要持久化數(shù)據(jù),你需要用一個模型來給任務(wù)建模,我們創(chuàng)建一個叫ToDoItem的Java類,一個POJO對象,為了簡化這個應(yīng)用,我們這里不采用數(shù)據(jù)庫來存儲,而是把數(shù)據(jù)存儲在內(nèi)存中,這很容易實(shí)現(xiàn)。實(shí)現(xiàn)存儲接口的類是InMemoryToDoRespository,缺點(diǎn)就是你的應(yīng)用程序關(guān)閉之后你就無法持久化數(shù)據(jù)了,后面我們會繼續(xù)完善這個應(yīng)用。

每一個標(biāo)準(zhǔn)的Java應(yīng)用都有一個Main Class,應(yīng)用程序的入口。這里的main class是ToDoApp,我們將會展現(xiàn)一欄的命令給用戶選擇,每一個命令被映射成一個枚舉類型CommandLineInput,ComandLineInputHandler類用來處理用戶輸入執(zhí)行相應(yīng)的任務(wù)。

下圖顯示了整個流程:

http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag11.png" alt="" />

搭建應(yīng)用的每一個模塊

表示Todo模型的類ToDoItem

    package com.manning.gia.todo.model;

    public class ToDoItem implements Comparable<ToDoItem> {
       private Long id;
       private String name;
       private boolean completed;
       (...)
    }

模型持久化接口ToDoRepository

    package com.manning.gia.todo.repository;

    import com.manning.gia.todo.model.ToDoItem;
    import java.util.Collection;

    public interface ToDoRepository {
        List<ToDoItem> findAll();
        ToDoItem findById(Long id);
        Long insert(ToDoItem toDoItem);
        void update(ToDoItem toDoItem);
        void delete(ToDoItem toDoItem);
    }

接下來創(chuàng)建一個可擴(kuò)展的、線程安全的實(shí)現(xiàn):

    package com.manning.gia.todo.repository;

    public class InMemoryToDoRepository implements ToDoRepository {
        private AtomicLong currentId = new AtomicLong();
        private ConcurrentMap<Long, ToDoItem> toDos = new ConcurrentHashMap<Long, ToDoItem>();

        @Override
        public List<ToDoItem> findAll() {
            List<ToDoItem> toDoItems = new ArrayList<ToDoItem>(toDos.values());
            Collections.sort(toDoItems);
            return toDoItems;

        }

        @Override
        public ToDoItem findById(Long id) {
            return toDos.get(id);
        }

        @Override
        public Long insert(ToDoItem toDoItem) {
            Long id = currentId.incrementAndGet();
            toDoItem.setId(id);
            toDos.putIfAbsent(id, toDoItem);
            return id;
        }

    @Override
    public void update(ToDoItem toDoItem) {
        toDos.replace(toDoItem.getId(), toDoItem);
    }

    @Override
    public void delete(ToDoItem toDoItem) {
       toDos.remove(toDoItem.getId());
    }

    }

應(yīng)用程序的入口

    package com.manning.gia.todo;
    import com.manning.gia.todo.utils.CommandLineInput;
    import com.manning.gia.todo.utils.CommandLineInputHandler;

    public class ToDoApp {
        public static final char DEFAULT_INPUT = '\u0000';
        public static void main(String args[]) {
            CommandLineInputHandler commandLineInputHandler = new
            CommandLineInputHandler();
            char command = DEFAULT_INPUT;

            while(CommandLineInput.EXIT.getShortCmd() != command) {
                commandLineInputHandler.printOptions();
                String input = commandLineInputHandler.readInput();
                char[] inputChars = input.length() == 1 ? input.toCharArray()
                char[] { DEFAULT_INPUT };
                command = inputChars[0];
                CommandLineInput commandLineInput = CommandLineInput.getCommandLineInputForInput(command);
                commandLineInputHandler.processInput(commandLineInput);
            }

        }
    }

到目前為止我們討論了應(yīng)用的組件和用戶交互。接下來就要用Gradle實(shí)現(xiàn)項(xiàng)目的自動化構(gòu)建,編譯源代碼、打包JAR文件、運(yùn)行應(yīng)用。