美文网首页
gradle 入门02

gradle 入门02

作者: 平头哥2 | 来源:发表于2019-12-01 09:18 被阅读0次

    gradle

    # 工程目录结构如下:
    │ build.gradle
    │
    └─src
        └─main
            └─java
                └─com
                    └─manning
                        └─gia
                            └─todo
                                │  ToDoApp.java
                                │
                                ├─model
                                │      ToDoItem.java
                                │
                                ├─repository
                                │      InMemoryToDoRepository.java
                                │      ToDoRepository.java
                                │
                                └─utils
                                        CommandLineInput.java
                                        CommandLineInputHandler.java
    

    代码如下:

    package com.manning.gia.todo.utils;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public enum CommandLineInput {
    
        FIND_ALL('a'), FIND_BY_ID('f'), INSERT('i'), UPDATE('u'), DELETE('d'), EXIT('e');
    
        private final static Map<Character, CommandLineInput> INPUTS;
    
        static {
            INPUTS = new HashMap<Character, CommandLineInput>();
    
            for (CommandLineInput input : values()) {
                INPUTS.put(input.getShortCmd(), input);
            }
        }
    
        private final char shortCmd;
    
        private CommandLineInput(char shortCmd) {
            this.shortCmd = shortCmd;
        }
    
        public char getShortCmd() {
            return shortCmd;
        }
    
        public static CommandLineInput getCommandLineInputForInput(char input) {
            return INPUTS.get(input);
        }
    }
    
    
    package com.manning.gia.todo.utils;
    
    import com.manning.gia.todo.model.ToDoItem;
    import com.manning.gia.todo.repository.InMemoryToDoRepository;
    import com.manning.gia.todo.repository.ToDoRepository;
    
    import java.util.Collection;
    
    public class CommandLineInputHandler {
        private ToDoRepository toDoRepository = new InMemoryToDoRepository();
    
        public void printOptions() {
            System.out.println("\n--- To Do Application ---");
            System.out.println("Please make a choice:");
            System.out.println("(a)ll items");
            System.out.println("(f)ind a specific item");
            System.out.println("(i)nsert a new item");
            System.out.println("(u)pdate an existing item");
            System.out.println("(d)elete an existing item");
            System.out.println("(e)xit");
        }
    
        public String readInput() {
            return System.console().readLine("> ");
        }
    
        public void processInput(CommandLineInput input) {
            if (input == null) {
                handleUnknownInput();
            } else {
                switch (input) {
                    case FIND_ALL:
                        printAllToDoItems();
                        break;
                    case FIND_BY_ID:
                        printToDoItem();
                        break;
                    case INSERT:
                        insertToDoItem();
                        break;
                    case UPDATE:
                        updateToDoItem();
                        break;
                    case DELETE:
                        deleteToDoItem();
                        break;
                    case EXIT:
                        break;
                    default:
                        handleUnknownInput();
                }
            }
        }
    
        private Long askForItemId() {
            System.out.println("Please enter the item ID:");
            String input = readInput();
            return Long.parseLong(input);
        }
    
        private ToDoItem askForNewToDoAction() {
            ToDoItem toDoItem = new ToDoItem();
            System.out.println("Please enter the name of the item:");
            toDoItem.setName(readInput());
            return toDoItem;
        }
    
        private void printAllToDoItems() {
            Collection<ToDoItem> toDoItems = toDoRepository.findAll();
    
            if (toDoItems.isEmpty()) {
                System.out.println("Nothing to do. Go relax!");
            } else {
                for (ToDoItem toDoItem : toDoItems) {
                    System.out.println(toDoItem);
                }
            }
        }
    
        private void printToDoItem() {
            ToDoItem toDoItem = findToDoItem();
    
            if (toDoItem != null) {
                System.out.println(toDoItem);
            }
        }
    
        private ToDoItem findToDoItem() {
            Long id = askForItemId();
            ToDoItem toDoItem = toDoRepository.findById(id);
    
            if (toDoItem == null) {
                System.err.println("To do item with ID " + id + " could not be found.");
            }
    
            return toDoItem;
        }
    
        private void insertToDoItem() {
            ToDoItem toDoItem = askForNewToDoAction();
            Long id = toDoRepository.insert(toDoItem);
            System.out.println("Successfully inserted to do item with ID " + id + ".");
        }
    
        private void updateToDoItem() {
            ToDoItem toDoItem = findToDoItem();
    
            if (toDoItem != null) {
                System.out.println(toDoItem);
                System.out.println("Please enter the name of the item:");
                toDoItem.setName(readInput());
                System.out.println("Please enter the done status the item:");
                toDoItem.setCompleted(Boolean.parseBoolean(readInput()));
                toDoRepository.update(toDoItem);
                System.out.println("Successfully updated to do item with ID " + toDoItem.getId() + ".");
            }
        }
    
        private void deleteToDoItem() {
            ToDoItem toDoItem = findToDoItem();
    
            if (toDoItem != null) {
                toDoRepository.delete(toDoItem);
                System.out.println("Successfully deleted to do item with ID " + toDoItem.getId() + ".");
            }
        }
    
        private void handleUnknownInput() {
            System.out.println("Please select a valid option!");
        }
    }
    
    package com.manning.gia.todo.repository;
    
    import com.manning.gia.todo.model.ToDoItem;
    
    import java.util.List;
    
    public interface ToDoRepository {
    
        List<ToDoItem> findAll();
    
        ToDoItem findById(Long id);
    
        Long insert(ToDoItem toDoItem);
    
        void update(ToDoItem toDoItem);
    
        void delete(ToDoItem toDoItem);
    }
    
    package com.manning.gia.todo.repository;
    
    import com.manning.gia.todo.model.ToDoItem;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.concurrent.ConcurrentHashMap;
    import java.util.concurrent.atomic.AtomicLong;
    
    public class InMemoryToDoRepository implements ToDoRepository {
    
        private AtomicLong currentId = new AtomicLong();
    
        private ConcurrentHashMap<Long, ToDoItem> toDos = new ConcurrentHashMap<>();
    
        @Override
        public List<ToDoItem> findAll() {
    
            List<ToDoItem> toDoItems = new ArrayList<>(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());
        }
    }
    
    package com.manning.gia.todo.model;
    
    public class ToDoItem implements Comparable<ToDoItem> {
    
        private Long id;
    
        private String name;
    
        private boolean completed;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public boolean isCompleted() {
            return completed;
        }
    
        public void setCompleted(boolean completed) {
            this.completed = completed;
        }
    
        @Override
        public int compareTo(ToDoItem o) {
            return 0;
        }
    }
    
    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() : new char[]{DEFAULT_INPUT};
    
                command = inputChars[0];
    
                CommandLineInput commandLineInput = CommandLineInput.getCommandLineInputForInput(command);
    
                commandLineInputHandler.processInput(commandLineInput);
            }
        }
    }
    

    build.gradle内容如下:

    //使用java插件
    apply plugin: 'java'
    

    Gradle构建如下:

    # 命令行执行
    $ gradle -i build
    Initialized native services in: D:\program\gradle\repo\native
    The client will now receive all logging from the daemon (pid: 17068). The daemon log file: D:\program\gradle\repo\daemon\5.4.1\daemon-17068.out.log
    Starting 12th build in daemon [uptime: 39 mins 49.873 secs, performance: 99%, non-heap usage: 17% of 268.4 MB]
    Using 8 worker leases.
    Invalidating in-memory cache of D:\study\gradle\.gradle\5.4.1\fileHashes\fileHashes.bin
    Starting Build
    Settings evaluated using settings file 'D:\study\gradle\settings.gradle'.
    Projects loaded. Root project using build file 'D:\study\gradle\build.gradle'.
    Included projects: [root project 'gradle']
    
    > Configure project :
    Evaluating root project 'gradle' using build file 'D:\study\gradle\build.gradle'.
    Invalidating in-memory cache of D:\study\gradle\.gradle\5.4.1\fileHashes\resourceHashesCache.bin
    Invalidating in-memory cache of D:\study\gradle\.gradle\buildOutputCleanup\outputFiles.bin
    All projects evaluated.
    Selected primary task 'build' from project :
    Invalidating in-memory cache of D:\study\gradle\.gradle\5.4.1\fileContent\annotation-processors.bin
    Tasks to be executed: [task ':compileJava', task ':processResources', task ':classes', task ':jar', task ':assemble', task ':compileTestJava', task ':processTestResources', task ':testClasses', task ':test', task ':check', task ':build']
    :compileJava (Thread[Execution worker for ':',5,main]) started.
    Invalidating in-memory cache of D:\study\gradle\.gradle\5.4.1\executionHistory\executionHistory.bin
    
    > Task :compileJava
    Caching disabled for task ':compileJava' because:
      Build cache is disabled
    Task ':compileJava' is not up-to-date because:
      No history is available.
    All input files are considered out-of-date for incremental task ':compileJava'.
    Invalidating in-memory cache of D:\study\gradle\.gradle\5.4.1\javaCompile\classAnalysis.bin
    Invalidating in-memory cache of D:\study\gradle\.gradle\5.4.1\javaCompile\jarAnalysis.bin
    Invalidating in-memory cache of D:\study\gradle\.gradle\5.4.1\javaCompile\taskHistory.bin
    Full recompilation is required because no incremental change information is available. This is usually caused by clean builds or changing compiler arguments.
    Compiling with JDK Java compiler API.
    Created classpath snapshot for incremental compilation in 0.0 secs.
    :compileJava (Thread[Execution worker for ':',5,main]) completed. Took 0.229 secs.
    :processResources (Thread[Execution worker for ':',5,main]) started.
    
    > Task :processResources NO-SOURCE
    file or directory 'D:\study\gradle\src\main\resources', not found
    Skipping task ':processResources' as it has no source files and no previous output files.
    :processResources (Thread[Execution worker for ':',5,main]) completed. Took 0.002 secs.
    :classes (Thread[Execution worker for ':',5,main]) started.
    
    > Task :classes
    Skipping task ':classes' as it has no actions.
    :classes (Thread[Execution worker for ':',5,main]) completed. Took 0.0 secs.
    :jar (Thread[Execution worker for ':',5,main]) started.
    
    > Task :jar
    Caching disabled for task ':jar' because:
      Build cache is disabled
    Task ':jar' is not up-to-date because:
      No history is available.
    :jar (Thread[Execution worker for ':',5,main]) completed. Took 0.13 secs.
    :assemble (Thread[Execution worker for ':',5,main]) started.
    
    > Task :assemble
    Skipping task ':assemble' as it has no actions.
    :assemble (Thread[Execution worker for ':',5,main]) completed. Took 0.0 secs.
    :compileTestJava (Thread[Execution worker for ':',5,main]) started.
    
    > Task :compileTestJava NO-SOURCE
    file or directory 'D:\study\gradle\src\test\java', not found
    Skipping task ':compileTestJava' as it has no source files and no previous output files.
    :compileTestJava (Thread[Execution worker for ':',5,main]) completed. Took 0.001 secs.
    :processTestResources (Thread[Execution worker for ':',5,main]) started.
    
    > Task :processTestResources NO-SOURCE
    file or directory 'D:\study\gradle\src\test\resources', not found
    Skipping task ':processTestResources' as it has no source files and no previous output files.
    :processTestResources (Thread[Execution worker for ':',5,main]) completed. Took 0.001 secs.
    :testClasses (Thread[Execution worker for ':',5,main]) started.
    
    > Task :testClasses UP-TO-DATE
    Skipping task ':testClasses' as it has no actions.
    :testClasses (Thread[Execution worker for ':',5,main]) completed. Took 0.0 secs.
    :test (Thread[Execution worker for ':',5,main]) started.
    
    > Task :test NO-SOURCE
    Skipping task ':test' as it has no source files and no previous output files.
    :test (Thread[Execution worker for ':',5,main]) completed. Took 0.002 secs.
    :check (Thread[Execution worker for ':',5,main]) started.
    
    > Task :check UP-TO-DATE
    Skipping task ':check' as it has no actions.
    :check (Thread[Execution worker for ':',5,main]) completed. Took 0.0 secs.
    :build (Thread[Execution worker for ':',5,main]) started.
    
    > Task :build
    Skipping task ':build' as it has no actions.
    :build (Thread[Execution worker for ':',5,main]) completed. Took 0.0 secs.
    
    BUILD SUCCESSFUL in 1s
    2 actionable tasks: 2 executed
    
    
    # 提交主要过程如下:
    $ gradle -i build
    Initialized native services # 初始化
    > Configure project : # 配置项目
    > Task :compileJava  # 编译源代码 
    > Task :processResources NO-SOURCE # 处理资源文件
    > Task :classes
    > Task :jar
    > Task :assemble #组装jar文件
    > Task :compileTestJava NO-SOURCE #编译测试源文件
    > Task :processTestResources NO-SOURCE #处理测试资源文件
    > Task :testClasses UP-TO-DATE # UP-TO-DATE表示任务跳过
    > Task :test NO-SOURCE # 运行测试单元
    > Task :check UP-TO-DATE
    > Task :build
    

    构建之后的目录结构如下:

    │  build.gradle
    │
    ├─.gradle
    │  ├─5.4.1
    │  │  │  gc.properties
    │  │  │
    │  │  ├─executionHistory
    │  │  │      executionHistory.bin
    │  │  │      executionHistory.lock
    │  │  │
    │  │  ├─fileChanges
    │  │  │      last-build.bin
    │  │  │
    │  │  ├─fileContent
    │  │  │      fileContent.lock
    │  │  │
    │  │  ├─fileHashes
    │  │  │      fileHashes.bin
    │  │  │      fileHashes.lock
    │  │  │
    │  │  ├─javaCompile
    │  │  │      javaCompile.lock
    │  │  │      taskHistory.bin
    │  │  │
    │  │  └─vcsMetadata-1
    │  ├─buildOutputCleanup
    │  │      buildOutputCleanup.lock
    │  │      cache.properties
    │  │      outputFiles.bin
    │  │
    │  └─vcs-1
    │          gc.properties
    │
    ├─build
    │  ├─classes
    │  │  └─java
    │  │      └─main
    │  │          └─com
    │  │              └─manning
    │  │                  └─gia
    │  │                      └─todo
    │  │                          │  ToDoApp.class
    │  │                          │
    │  │                          ├─model
    │  │                          │      ToDoItem.class
    │  │                          │
    │  │                          ├─repository
    │  │                          │      InMemoryToDoRepository.class
    │  │                          │      ToDoRepository.class
    │  │                          │
    │  │                          └─utils
    │  │                                  CommandLineInput.class
    │  │                                  CommandLineInputHandler$1.class
    │  │                                  CommandLineInputHandler.class
    │  │
    │  ├─generated
    │  │  └─sources
    │  │      └─annotationProcessor
    │  │          └─java
    │  │              └─main
    │  ├─libs
    │  │      gradle.jar  #名字来自于项目的目录名
    │  │
    │  └─tmp
    │      ├─compileJava
    │      └─jar
    │              MANIFEST.MF
    │
    └─src
    

    定制基于约定构建的标准

    # 获取可配置标准和插件属性的列表,并且显示默认值
    $ gradle properties
    
    > Task :properties
    
    ------------------------------------------------------------
    Root project
    ------------------------------------------------------------
    
    allprojects: [root project 'gradle']
    ant: org.gradle.api.internal.project.DefaultAntBuilder@10762a0a
    antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@721d19a0
    archivesBaseName: gradle
    artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@62bb930a
    asDynamicObject: DynamicObject for root project 'gradle'
    autoTargetJvmDisabled: false
    baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@62b54745
    buildDir: D:\study\gradle\build
    buildFile: D:\study\gradle\build.gradle
    buildPath: :
    buildScriptSource: org.gradle.groovy.scripts.TextResourceScriptSource@43321763
    buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@5978c6bc
    childProjects: {}
    class: class org.gradle.api.internal.project.DefaultProject_Decorated
    classLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@67652d5a
    components: SoftwareComponentInternal set
    configurationActions: org.gradle.configuration.project.DefaultProjectConfigurationActionContainer@2f22c19c
    configurationTargetIdentifier: org.gradle.configuration.ConfigurationTargetIdentifier$1@7cf85214
    configurations: configuration container
    convention: org.gradle.api.internal.plugins.DefaultConvention@632a2611
    defaultArtifacts: org.gradle.api.internal.plugins.DefaultArtifactPublicationSet_Decorated@2d6bd8d3
    defaultTasks: []
    deferredProjectConfiguration: org.gradle.api.internal.project.DeferredProjectConfiguration@14fcd2c3
    dependencies: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@2aaa5aba
    dependencyLocking: org.gradle.internal.locking.DefaultDependencyLockingHandler_Decorated@1882fb50
    depth: 0
    description: null
    displayName: root project 'gradle'
    distsDir: D:\study\gradle\build\distributions
    distsDirName: distributions
    docsDir: D:\study\gradle\build\docs
    docsDirName: docs
    ext: org.gradle.internal.extensibility.DefaultExtraPropertiesExtension@6b5c05d3
    extensions: org.gradle.api.internal.plugins.DefaultConvention@632a2611
    fileOperations: org.gradle.api.internal.file.DefaultFileOperations@1944b8b1
    fileResolver: org.gradle.api.internal.file.BaseDirFileResolver@61c35ea9
    gradle: build 'gradle'
    group:
    identityPath: :
    inheritedScope: org.gradle.internal.extensibility.ExtensibleDynamicObject$InheritedDynamicObject@6e1471ba
    java: org.gradle.api.plugins.internal.DefaultJavaPluginExtension_Decorated@656d8336
    layout: org.gradle.api.internal.file.DefaultProjectLayout@59502e1a
    libsDir: D:\study\gradle\build\libs
    libsDirName: libs
    listenerBuildOperationDecorator: org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator@221d058f
    logger: org.gradle.internal.logging.slf4j.OutputEventListenerBackedLogger@2b4d2bb9
    logging: org.gradle.internal.logging.services.DefaultLoggingManager@6fc939d7
    modelRegistry: org.gradle.model.internal.registry.DefaultModelRegistry@6634732b
    modelSchemaStore: org.gradle.model.internal.manage.schema.extract.DefaultModelSchemaStore@6bdfc32
    module: org.gradle.api.internal.artifacts.ProjectBackedModule@72318935
    mutationState: project :
    name: gradle
    normalization: org.gradle.normalization.internal.DefaultInputNormalizationHandler_Decorated@3eccb109
    objects: org.gradle.api.internal.model.DefaultObjectFactory@7437fa22
    parent: null
    parentIdentifier: null
    path: :
    pluginManager: org.gradle.api.internal.plugins.DefaultPluginManager_Decorated@521662f2
    plugins: [org.gradle.buildinit.plugins.BuildInitPlugin@17fefeb0, org.gradle.buildinit.plugins.WrapperPlugin@4ce151bf, org.gradle.api.plugins.HelpTasksPlugin@74c44eb, org.gradle.language.base.plugins.LifecycleBasePlugin@662ca702, org.gradle.api.plugins.BasePlugin@647ce09, org.gradle.api.plugins.ReportingBasePlugin@40ed1bd7, org.gradle.api.plugins.JavaBasePlugin@2563643d, org.gradle.api.plugins.JavaPlugin@26f4d324]
    processOperations: org.gradle.process.internal.DefaultExecActionFactory$DecoratingExecActionFactory@1e7b6675
    project: root project 'gradle'
    projectConfigurator: org.gradle.api.internal.project.BuildOperationCrossProjectConfigurator@3660e5ce
    projectDir: D:\study\gradle
    projectEvaluationBroadcaster: ProjectEvaluationListener broadcast
    projectEvaluator: org.gradle.configuration.project.LifecycleProjectEvaluator@89c3db3
    projectPath: :
    projectRegistry: org.gradle.api.internal.project.DefaultProjectRegistry@871a277
    properties: {...}
    providers: org.gradle.api.internal.provider.DefaultProviderFactory@27a27c68
    publicType: org.gradle.api.plugins.BasePluginConvention
    reporting: org.gradle.api.reporting.ReportingExtension_Decorated@4d7c35c2
    reportsDir: D:\study\gradle\build\reports
    repositories: repository container
    resourceLoader: org.gradle.internal.resource.transfer.DefaultUriTextResourceLoader@7c83f736
    resources: org.gradle.api.internal.resources.DefaultResourceHandler@151b2cb0
    rootDir: D:\study\gradle
    rootProject: root project 'gradle'
    script: false
    scriptHandlerFactory: org.gradle.api.internal.initialization.DefaultScriptHandlerFactory@107c467e
    scriptPluginFactory: org.gradle.configuration.ScriptPluginFactorySelector@3c82a396
    serviceRegistryFactory: org.gradle.internal.service.scopes.ProjectScopeServices$4@5fdbc977
    services: ProjectScopeServices
    sourceCompatibility: 1.8
    sourceSets: SourceSet container
    standardOutputCapture: org.gradle.internal.logging.services.DefaultLoggingManager@6fc939d7
    state: project state 'EXECUTED'
    status: integration
    subprojects: []
    targetCompatibility: 1.8
    tasks: task set
    testReportDir: D:\study\gradle\build\reports\tests
    testReportDirName: tests
    testResultsDir: D:\study\gradle\build\test-results
    testResultsDirName: test-results
    version: unspecified
    
    BUILD SUCCESSFUL in 0s
    1 actionable task: 1 executed
    

    修改gradle.build文件如下:

    apply plugin: 'java'
    sourceCompatibility = 1.7 // 设置java编译版本兼容1.7
    version = 0.1 //定义项目版本
    
    jar {
       manifest { 
          attributes 'Main-Class': 'com.manning.gia.todo.ToDoApp' // 设置Main class
       }
    }
    
    # 重新gradle build
    $ gradle build
    
    #重新执行 gradle properties
    sourceCompatibility: 1.7
    targetCompatibility: 1.7
    version: 0.1
    
    ## 查看生成的jar 包,名字如下:
    gradle-0.1.jar
    

    改变项目默认结构,新的gradle.build文件如下:

    apply plugin: 'java'
    sourceCompatibility = 1.7
    version = 0.1
    
    jar {
       manifest { 
          attributes 'Main-Class': 'com.manning.gia.todo.ToDoApp' 
       }
    }
    
    sourceSets {
       main {
          java {
              //将源代码默认目录 src/main/java 修改为 src
             srcDirs = ['src']    
          }
       }
       test {
          java {
              //将测试代码默认目录 src/test/java 修改为 test
             srcDirs = ['test']    
          }
       }
    }
    buildDir = 'out' // 改变项目输出属性(路径) 为out目录
    
    # 把源代码移动到src目录下面,
    src
        └─com
            └─manning
                └─gia
                    └─todo
                        │  ToDoApp.java
                        │
                        ├─model
                        │      ToDoItem.java
                        │
                        ├─repository
                        │      InMemoryToDoRepository.java
                        │      ToDoRepository.java
                        │
                        └─utils
                                CommandLineInput.java
                                CommandLineInputHandler.java
    
    #再次执行gradle.build, 目录结构如下
    ├─out
    │  ├─classes
    │  │  └─java
    │  │      └─main
    │  │          └─com
    │  │              └─manning
    │  │                  └─gia
    │  │                      └─todo
    │  │                          ├─model
    │  │                          ├─repository
    │  │                          └─utils
    │  ├─generated
    │  │  └─sources
    │  │      └─annotationProcessor
    │  │          └─java
    │  │              └─main
    │  ├─libs
    │  └─tmp
    │      ├─compileJava
    │      └─jar
    └─src
    

    定义仓库和依赖

    //gradle.build添加如下内容:
    repositories {
       mavenCentral()             
    }
    
    dependencies {
        // https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
        compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.9'
    }
    

    gradle 做web开发

    # 文件结构
    │  build.gradle
    │
    └─src
        └─main
            ├─java
            │  └─com
            │      └─manning
            │          └─gia
            │              └─todo
            │                  ├─model
            │                  │      ToDoItem.java
            │                  │
            │                  ├─repository
            │                  │      InMemoryToDoRepository.java
            │                  │      ToDoRepository.java
            │                  │
            │                  └─web
            │                          ToDoServlet.java
            │
            └─webapp
                ├─css
                │      base.css
                │      bg.png
                │
                ├─jsp
                │      index.jsp
                │      todo-list.jsp
                │
                └─WEB-INF
                        web.xml
    

    build.gradle文件:

    apply plugin: 'java'
    apply plugin: 'war'
    
    buildscript {
      repositories {
        maven {
          url "https://plugins.gradle.org/m2/"
        }
      }
      dependencies {
        classpath "gradle.plugin.org.akhikhl.gretty:gretty:2.0.0"
      }
    }
    
    
    apply plugin: "org.akhikhl.gretty"
    
    //task createWrapper(type: Wrapper) {
       // gradleVersion = '0.9-preview-1'
    //}//
    
    
    repositories {
        mavenCentral()
        jcenter()
    }
    
    dependencies {
        compile 'javax.servlet:servlet-api:2.5',
                'javax.servlet.jsp:jsp-api:2.1'
        runtime 'javax.servlet:jstl:1.1.2',
                'taglibs:standard:1.1.2'
    }
    
    # 在嵌入web容器里面运行
    $ gradle jettyRun
    Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details
    16:28:00 INFO  Jetty 9.2.22.v20170606 started and listening on port 8080
    16:28:00 INFO  ToDo Application runs at:
    16:28:00 INFO    http://localhost:8080/todo-webapp
    
    > Task :jettyRun
    Press any key to stop the server.
    <===========--> 87% EXECUTING [52s]
    > :jettyRun
    > IDLE
    
    # 在浏览器访问:
    http://localhost:8080/todo-webapp
    

    wrapper的使用

    $ gradle -i wrapper
    > Configure project :
    > Task :wrapper UP-TO-DATE
    BUILD SUCCESSFUL in 1s
    1 actionable task: 1 up-to-date
    
    
    # 生成的文件目录结构如下:
    │  build.gradle
    │  gradlew
    │  gradlew.bat
    ├─ gradle
    │  └─wrapper
    │          gradle-wrapper.jar
    │          gradle-wrapper.properties
    
    # wrapper的使用          windows 使用: gradlew.bat
    $ gradlew.bat jettyRun
    16:35:53 INFO  Jetty 9.2.22.v20170606 started and listening on port 8080
    16:35:53 INFO  ToDo Application runs at:
    16:35:53 INFO    http://localhost:8080/todo-webapp
    
    > Task :jettyRun
    Press any key to stop the server.
    <===========--> 87% EXECUTING [41s]
    > :jettyRun
    

    相关文章

      网友评论

          本文标题:gradle 入门02

          本文链接:https://www.haomeiwen.com/subject/teqzwctx.html