สร้าง java project เล็กๆด้วย Gradle
Tags: java
Published: 2021-02-26 16:05:46

ถ้าอยากรันโค้ด Java และมี dependencies ต่างๆด้วย ตอนนี้ทำได้ง่ายๆด้วย [Gradle](https://docs.gradle.org/current/samples/sample_building_java_applications.html) ตัวอย่างการสร้างโปรเจ็ค Java ด้วย gradle ง่ายๆทำได้ดังนี้

สร้าง directory ใหม่แล้ว cd เข้าไป
```
> mkdir demo-java
> cd demo-java
```

จากนั้นสั่ง `gradle init` แล้วเลือก option ตามนี้

```
> gradle init

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 2

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Scala
  6: Swift
Enter selection (default: Java) [1..6] 

Split functionality across multiple subprojects?:
  1: no - only one application project
  2: yes - application and library projects
Enter selection (default: no - only one application project) [1..2] 

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4] 

Project name (default: demo-java): 
Source package (default: demo.java): 

> Task :init
Get more help with your project: https://docs.gradle.org/6.8.3/samples/sample_building_java_applications.html

BUILD SUCCESSFUL in 22s
2 actionable tasks: 2 executed
```

โครงสร้าง directory และไฟล์ต่างๆจะได้ตามนี้

```
.
├── app
│   ├── build
│   │   ├── classes
│   │   │   └── java
│   │   │       └── main
│   │   │           └── demo
│   │   │               └── java
│   │   │                   └── App.class
│   │   ├── generated
│   │   │   └── sources
│   │   │       ├── annotationProcessor
│   │   │       │   └── java
│   │   │       │       └── main
│   │   │       └── headers
│   │   │           └── java
│   │   │               └── main
│   │   └── tmp
│   │       └── compileJava
│   │           └── source-classes-mapping.txt
│   ├── build.gradle
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── demo
│       │   │       └── java
│       │   │           └── App.java
│       │   └── resources
│       └── test
│           ├── java
│           │   └── demo
│           │       └── java
│           │           └── AppTest.java
│           └── resources
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
```

โค้ดที่เราจะเขียนคือเขียนใน `app/src/main/java/demo/java/App.java` ซึ่ง gradle จะเจน example ให้แบบนี้

```java
/*
 * This Java source file was generated by the Gradle 'init' task.
 */
package demo.java;

public class App {
    public String getGreeting() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        System.out.println(new App().getGreeting());
    }
}
```

เราก็แก้โค้ดเล่นในนี้แล้วสั่งรันได้โดย `gradle run`

```
> gradle run

> Task :app:run
Hello World!

```

ทีนี้ถ้าเราจำเป็นต้องใช้ package อื่นที่ไม่ใช้ standard library ของ Java เราสามารถหา dependencies ได้จาก https://mvnrepository.com/ เช่นอยากได้ Apache Commons Codec เพื่อใช้งาน [Hex.encodeHexString](https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Hex.html#encodeHexString-byte:A-) ก็ค้น Apache Commons Codec ในเว็บ https://mvnrepository.com/ แล้วเลือก version จากนั้นเลือก tab Gradle แล้วก็อปปี้ config ประมาณนี้

```
// https://mvnrepository.com/artifact/commons-codec/commons-codec
implementation group: 'commons-codec', name: 'commons-codec', version: '1.15'

```

แล้วเอาไปแก้ config ที่ไฟล์ `app/build.gradle` โดยเพิ่มใน block `dependencies {}` แบบนี้

```groovy
dependencies {
    // Use JUnit test framework.
    testImplementation 'junit:junit:4.13'

    // This dependency is used by the application.
    implementation 'com.google.guava:guava:29.0-jre'

    implementation group: 'commons-codec', name: 'commons-codec', version: '1.15'
}
```

เท่านี้เราก็สามารถใช้ Hex.encodeHexString ได้แล้วเช่นแก้โค้ดใน App.java เป็นแบบนี้

```java
package demo.java;

import org.apache.commons.codec.binary.Hex;


public class App {
    public static void main(String[] args) {
        System.out.println(Hex.encodeHexString("Hello World".getBytes()));
    }
}
```

สั่งรันด้วย `gradle run` ก็จะได้แบบนี้

```
> gradle run

> Task :app:run
48656c6c6f20576f726c64

BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed
```

Ref: https://docs.gradle.org/current/samples/sample_building_java_applications.html


## ขอฝาก Buy Me a Coffee
สำหรับท่านใดที่อ่านแล้วชอบโพสต์ต่างๆของผมที่นี่ ต้องการสนับสนุนค่ากาแฟเล็กๆน้อยๆ สามารถสนับสนุนผมได้ผ่านทาง Buy Me a Coffee คลิ๊กที่รูปด้านล่างนี้ได้เลยครับ

<a href="https://www.buymeacoffee.com/weerasak" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>

ส่วนท่านใดไม่สะดวกใช้บัตรเครดิต หรือ Paypal สามารถสนับสนุนผมได้ผ่านทาง PromptPay โดยดู QR Code ได้จากโพสต์ที่พินเอาไว้ได้ที่ Page DevDose ครับ https://web.facebook.com/devdoseth

ขอบคุณครับ 🙏