gradle 入门02

2019-12-01  本文已影响0人  平头哥2

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
上一篇下一篇

猜你喜欢

热点阅读