├── CHANGELOG.md ├── CONTRIBUTING.md ├── README.md ├── src └── main │ ├── java │ └── com │ │ └── maryanto │ │ └── dimas │ │ └── example │ │ ├── repository │ │ └── ExampleEntityRepository.java │ │ ├── utils │ │ └── DaoReactiveDataTablesPattern.java │ │ ├── WebfluxExampleApplication.java │ │ ├── mappers │ │ └── ExampleEntityMapper.java │ │ ├── service │ │ └── ExampleEntityService.java │ │ ├── entity │ │ └── ExampleEntity.java │ │ ├── dto │ │ └── ExampleEntityDto.java │ │ ├── config │ │ ├── WebFluxConfiguration.java │ │ └── DatasourceConfiguration.java │ │ ├── controller │ │ └── ExampleController.java │ │ └── dao │ │ └── ExampleDao.java │ └── resources │ ├── db │ └── migration │ │ └── V2019_09_17_11_47_21__schema-example.sql │ └── application.yml ├── docker-compose.yml ├── .gitignore ├── LICENSE └── pom.xml /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## `!Not for production Ready` -------------------------------------------------------------------------------- /src/main/java/com/maryanto/dimas/example/repository/ExampleEntityRepository.java: -------------------------------------------------------------------------------- 1 | package com.maryanto.dimas.example.repository; 2 | 3 | import com.maryanto.dimas.example.entity.ExampleEntity; 4 | import org.springframework.data.repository.reactive.ReactiveCrudRepository; 5 | 6 | public interface ExampleEntityRepository extends ReactiveCrudRepository { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/maryanto/dimas/example/utils/DaoReactiveDataTablesPattern.java: -------------------------------------------------------------------------------- 1 | package com.maryanto.dimas.example.utils; 2 | 3 | import reactor.core.publisher.Mono; 4 | 5 | import java.io.Serializable; 6 | 7 | public interface DaoReactiveDataTablesPattern { 8 | 9 | Mono findId(ID var1); 10 | 11 | Mono save(T var1); 12 | 13 | Mono update(T var1); 14 | 15 | Mono removeById(ID var1); 16 | } 17 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.7' 2 | services: 3 | postgres: 4 | image: repository.dimas-maryanto.com:8086/postgres:9.6 5 | environment: 6 | - POSTGRES_PASSWORD=passwordnyaPostgres 7 | - POSTGRES_USER=postgres 8 | - POSTGRES_DB=postgres 9 | ports: 10 | - 5432:5432 11 | volumes: 12 | - postgres_data:/var/lib/postgresql/data 13 | networks: 14 | - postgres-network 15 | volumes: 16 | postgres_data: 17 | networks: 18 | postgres-network: 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/** 5 | !**/src/test/** 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | 30 | ### VS Code ### 31 | .vscode/ 32 | 33 | ### Filesystems ### 34 | .DS_Store 35 | *.log* 36 | -------------------------------------------------------------------------------- /src/main/java/com/maryanto/dimas/example/WebfluxExampleApplication.java: -------------------------------------------------------------------------------- 1 | package com.maryanto.dimas.example; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories; 6 | import org.springframework.transaction.annotation.EnableTransactionManagement; 7 | 8 | @SpringBootApplication 9 | @EnableTransactionManagement 10 | public class WebfluxExampleApplication { 11 | 12 | public static void main(String[] args) { 13 | SpringApplication.run(WebfluxExampleApplication.class, args); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/maryanto/dimas/example/mappers/ExampleEntityMapper.java: -------------------------------------------------------------------------------- 1 | package com.maryanto.dimas.example.mappers; 2 | 3 | import com.maryanto.dimas.example.dto.ExampleEntityDto; 4 | import com.maryanto.dimas.example.entity.ExampleEntity; 5 | import com.maryanto.dimas.plugins.web.commons.mappers.ObjectMapper; 6 | import org.mapstruct.Mapper; 7 | import org.mapstruct.Mapping; 8 | import org.mapstruct.Mappings; 9 | import org.mapstruct.factory.Mappers; 10 | 11 | public class ExampleEntityMapper { 12 | 13 | @Mapper 14 | public interface ExampleEntityCreate extends ObjectMapper { 15 | ExampleEntityCreate instance = Mappers.getMapper(ExampleEntityCreate.class); 16 | 17 | @Override 18 | @Mappings(value = { 19 | @Mapping(target = "id", ignore = true), 20 | @Mapping(target = "createdDate", ignore = true) 21 | }) 22 | ExampleEntity convertToEntity(ExampleEntityDto.Create create); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/maryanto/dimas/example/service/ExampleEntityService.java: -------------------------------------------------------------------------------- 1 | package com.maryanto.dimas.example.service; 2 | 3 | import com.maryanto.dimas.example.dao.ExampleDao; 4 | import com.maryanto.dimas.example.dto.ExampleEntityDto; 5 | import com.maryanto.dimas.example.entity.ExampleEntity; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | import org.springframework.transaction.reactive.TransactionalOperator; 9 | import reactor.core.publisher.Flux; 10 | import reactor.core.publisher.Mono; 11 | 12 | @Service 13 | public class ExampleEntityService { 14 | 15 | @Autowired 16 | private TransactionalOperator trxOperator; 17 | @Autowired 18 | private ExampleDao dao; 19 | 20 | public Mono save(ExampleEntity data) { 21 | return dao.save(data) 22 | .as(trxOperator::transactional); 23 | } 24 | 25 | public Flux findAll() { 26 | return dao.findAll(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/maryanto/dimas/example/entity/ExampleEntity.java: -------------------------------------------------------------------------------- 1 | package com.maryanto.dimas.example.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.springframework.data.annotation.Id; 7 | import org.springframework.data.relational.core.mapping.Column; 8 | import org.springframework.data.relational.core.mapping.Table; 9 | 10 | import java.io.Serializable; 11 | import java.math.BigDecimal; 12 | import java.time.LocalDate; 13 | import java.time.LocalDateTime; 14 | 15 | @Data 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | @Table("examples") 19 | public class ExampleEntity implements Serializable { 20 | 21 | @Id 22 | @Column("id") 23 | private String id; 24 | @Column("name") 25 | private String nama; 26 | @Column("age") 27 | private Integer umur; 28 | @Column("birthdate") 29 | private LocalDate tanggalLahir; 30 | @Column("balance") 31 | private BigDecimal saldo; 32 | @Column("created_date") 33 | private LocalDateTime createdDate; 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V2019_09_17_11_47_21__schema-example.sql: -------------------------------------------------------------------------------- 1 | CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; 2 | 3 | create table examples 4 | ( 5 | id character varying(64) not null primary key default uuid_generate_v4(), 6 | name character varying(100), 7 | age integer default 0, 8 | birthdate date not null default now(), 9 | balance decimal(14) not null default 0, 10 | created_date timestamp not null default now() 11 | ); 12 | 13 | insert into examples(id, name, age, birthdate, balance, created_date) 14 | values (uuid_generate_v4(), 'Dimas Maryanto', 21, now(), 0, now()), 15 | (uuid_generate_v4(), 'Hari Sapto Adi', 22, now(), 0, now()), 16 | (uuid_generate_v4(), 'Muhamad Yusuf', 23, now(), 0, now()), 17 | (uuid_generate_v4(), 'Prima Jakaria', 24, now(), 0, now()), 18 | (uuid_generate_v4(), 'Andri', 25, now(), 0, now()), 19 | (uuid_generate_v4(), 'Gufron', 26, now(), 0, now()); 20 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Dimas Maryanto 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/main/java/com/maryanto/dimas/example/dto/ExampleEntityDto.java: -------------------------------------------------------------------------------- 1 | package com.maryanto.dimas.example.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import javax.validation.constraints.NotEmpty; 8 | import javax.validation.constraints.NotNull; 9 | import javax.validation.constraints.Past; 10 | import java.math.BigDecimal; 11 | import java.time.LocalDate; 12 | 13 | public class ExampleEntityDto { 14 | 15 | @Data 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | public static class Create { 19 | 20 | @NotNull 21 | @NotEmpty 22 | private String nama; 23 | @NotNull 24 | private Integer umur; 25 | @NotNull 26 | @Past 27 | private LocalDate tanggalLahir; 28 | @NotNull 29 | private BigDecimal saldo; 30 | } 31 | 32 | @Data 33 | @AllArgsConstructor 34 | @NoArgsConstructor 35 | public static class Response { 36 | 37 | private String id; 38 | private String nama; 39 | private Integer umur; 40 | private Long tanggalLahir; 41 | private BigDecimal saldo; 42 | private Long createdDate; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/maryanto/dimas/example/config/WebFluxConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.maryanto.dimas.example.config; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.http.server.reactive.ServerHttpRequest; 7 | import org.springframework.web.reactive.config.EnableWebFlux; 8 | import org.springframework.web.reactive.config.WebFluxConfigurer; 9 | import org.springframework.web.server.WebFilter; 10 | 11 | @Configuration 12 | @EnableWebFlux 13 | public class WebFluxConfiguration implements WebFluxConfigurer { 14 | 15 | @Bean 16 | public WebFilter contextPathWebFilter(@Value("${server.servlet.context-path}") String contextPath) { 17 | return (exchange, chain) -> { 18 | ServerHttpRequest request = exchange.getRequest(); 19 | if (request.getURI().getPath().startsWith(contextPath)) { 20 | return chain.filter( 21 | exchange.mutate() 22 | .request(request.mutate().contextPath(contextPath).build()) 23 | .build()); 24 | } 25 | return chain.filter(exchange); 26 | }; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/maryanto/dimas/example/controller/ExampleController.java: -------------------------------------------------------------------------------- 1 | package com.maryanto.dimas.example.controller; 2 | 3 | import com.maryanto.dimas.example.dto.ExampleEntityDto; 4 | import com.maryanto.dimas.example.entity.ExampleEntity; 5 | import com.maryanto.dimas.example.mappers.ExampleEntityMapper.ExampleEntityCreate; 6 | import com.maryanto.dimas.example.service.ExampleEntityService; 7 | import lombok.extern.slf4j.Slf4j; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.web.bind.annotation.*; 10 | import reactor.core.publisher.Flux; 11 | import reactor.core.publisher.Mono; 12 | 13 | import javax.validation.Valid; 14 | import java.time.LocalDateTime; 15 | 16 | @Slf4j 17 | @RestController 18 | @RequestMapping("/api/example") 19 | public class ExampleController { 20 | 21 | @Autowired 22 | private ExampleEntityService service; 23 | 24 | @PostMapping("/save") 25 | public Mono save(@RequestBody @Valid ExampleEntityDto.Create dto) { 26 | ExampleEntity entity = ExampleEntityCreate.instance.convertToEntity(dto); 27 | entity.setCreatedDate(LocalDateTime.now()); 28 | return service.save(entity); 29 | } 30 | 31 | @GetMapping("/list") 32 | public Flux findAll() { 33 | return service.findAll(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | database: 2 | host: ${DATABASE_HOST:localhost} 3 | port: ${DATABASE_PORT:5432} 4 | name: ${DATABASE_NAME:postgres} 5 | auth: 6 | username: ${DATABASE_USER:postgres} 7 | password: ${DATABASE_PASSWORD:passwordnyaPostgres} 8 | server: 9 | port: ${APPLICATION_PORT:8080} 10 | servlet: 11 | context-path: /@project.artifactId@ 12 | # spring configuration 13 | spring: 14 | application: 15 | name: @project.artifactId@ 16 | version: @project.version@ 17 | fullname: @project.name@ 18 | mvc: 19 | dispatch-options-request: true 20 | datasource: 21 | url: r2dbc:pool:postgresql://${database.host}:${database.port}/${database.name} 22 | username: ${database.auth.username} 23 | password: ${database.auth.password} 24 | driver-class-name: org.postgresql.Driver 25 | flyway: 26 | encoding: UTF-8 27 | enabled: true 28 | baseline-on-migrate: true 29 | clean-disabled: false 30 | clean-on-validation-error: true 31 | connect-retries: 3 32 | check-location: true 33 | user: ${database.auth.username} 34 | password: ${database.auth.password} 35 | url: jdbc:postgresql://${database.host}:${database.port}/${database.name} 36 | main: 37 | allow-bean-definition-overriding: true 38 | logging: 39 | level: 40 | com.maryanto.dimas.example: ${LOG_LEVEL:DEBUG} 41 | org.springframework: DEBUG 42 | file: ${LOG_LOCATION:${spring.application.name}.log} 43 | -------------------------------------------------------------------------------- /src/main/java/com/maryanto/dimas/example/config/DatasourceConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.maryanto.dimas.example.config; 2 | 3 | import io.r2dbc.postgresql.PostgresqlConnectionConfiguration; 4 | import io.r2dbc.postgresql.PostgresqlConnectionFactory; 5 | import io.r2dbc.spi.ConnectionFactory; 6 | import org.springframework.beans.factory.annotation.Qualifier; 7 | import org.springframework.beans.factory.annotation.Value; 8 | import org.springframework.boot.autoconfigure.flyway.FlywayDataSource; 9 | import org.springframework.context.annotation.Bean; 10 | import org.springframework.context.annotation.Configuration; 11 | import org.springframework.data.r2dbc.config.AbstractR2dbcConfiguration; 12 | import org.springframework.data.r2dbc.core.DatabaseClient; 13 | import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories; 14 | 15 | @Configuration 16 | @EnableR2dbcRepositories 17 | @FlywayDataSource 18 | public class DatasourceConfiguration extends AbstractR2dbcConfiguration { 19 | 20 | @Value("${database.host}") 21 | String host; 22 | @Value("${database.port}") 23 | Integer port; 24 | @Value("${database.name}") 25 | String databaseName; 26 | @Value("${database.auth.username}") 27 | String username; 28 | @Value("${database.auth.password}") 29 | String password; 30 | 31 | @Bean 32 | public DatabaseClient databaseClient(@Qualifier("connectionFactory") ConnectionFactory cf) { 33 | return DatabaseClient.create(cf); 34 | } 35 | 36 | @Override 37 | @Bean 38 | public ConnectionFactory connectionFactory() { 39 | return new PostgresqlConnectionFactory( 40 | PostgresqlConnectionConfiguration.builder() 41 | .host(host) 42 | .port(port) 43 | .database(databaseName) 44 | .username(username) 45 | .password(password) 46 | .build() 47 | ); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/maryanto/dimas/example/dao/ExampleDao.java: -------------------------------------------------------------------------------- 1 | package com.maryanto.dimas.example.dao; 2 | 3 | import com.maryanto.dimas.example.dto.ExampleEntityDto; 4 | import com.maryanto.dimas.example.entity.ExampleEntity; 5 | import com.maryanto.dimas.example.repository.ExampleEntityRepository; 6 | import lombok.extern.slf4j.Slf4j; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.data.domain.Sort; 9 | import org.springframework.data.r2dbc.core.DatabaseClient; 10 | import org.springframework.stereotype.Repository; 11 | import reactor.core.publisher.Flux; 12 | import reactor.core.publisher.Mono; 13 | 14 | import java.math.BigDecimal; 15 | import java.sql.Date; 16 | import java.sql.Timestamp; 17 | import java.time.LocalDate; 18 | import java.time.LocalDateTime; 19 | import java.util.Objects; 20 | 21 | @Slf4j 22 | @Repository 23 | public class ExampleDao { 24 | 25 | @Autowired 26 | private DatabaseClient client; 27 | 28 | @Autowired 29 | private ExampleEntityRepository repository; 30 | 31 | public Mono save(ExampleEntity data) { 32 | return repository.save(data); 33 | // return null; 34 | } 35 | 36 | public Mono update(ExampleEntity data) { 37 | log.info("{}", data); 38 | Mono rowUpdated = client 39 | .execute("update examples\n" + 40 | "set name = :name,\n" + 41 | " age = :age,\n" + 42 | " birthdate = :birthdate\n" + 43 | "where id = :id") 44 | .bind("name", data.getNama()) 45 | .bind("age", data.getUmur()) 46 | .bind("birthdate", data.getTanggalLahir()) 47 | .bind("id", data.getId()) 48 | .then(); 49 | return rowUpdated; 50 | } 51 | 52 | public Flux findAll() { 53 | Flux list = client.select().from(ExampleEntity.class) 54 | .orderBy(Sort.Order.asc("umur")) 55 | .map( 56 | (row, rowMetadata) -> new ExampleEntityDto.Response( 57 | row.get("id", String.class), 58 | row.get("name", String.class), 59 | row.get("age", Integer.class), 60 | row.get("birthdate", LocalDate.class) != null ? 61 | Date.valueOf(Objects.requireNonNull(row.get("birthdate", LocalDate.class))).getTime() : 62 | null, 63 | row.get("balance", BigDecimal.class), 64 | row.get("created_date", LocalDateTime.class) != null ? 65 | Timestamp.valueOf(Objects.requireNonNull(row.get("created_date", LocalDateTime.class))).getTime() : 66 | null 67 | ) 68 | ) 69 | .all(); 70 | return list; 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | org.springframework.boot 7 | spring-boot-starter-parent 8 | 2.2.0.M6 9 | 10 | 11 | com.maryanto.dimas.example 12 | webflux-r2dbc 13 | 0.0.1 14 | springboot2-webflux-r2dbc-example 15 | Demo project for Spring Boot 16 | 17 | 18 | UTF-8 19 | UTF-8 20 | 1.8 21 | 22 | 23 | 24 | 25 | org.springframework.boot 26 | spring-boot-starter-jdbc 27 | runtime 28 | 29 | 30 | org.springframework.boot.experimental 31 | spring-boot-starter-data-r2dbc 32 | 33 | 34 | org.springframework.boot 35 | spring-boot-starter-webflux 36 | 37 | 38 | org.flywaydb 39 | flyway-core 40 | 41 | 42 | org.springframework.boot 43 | spring-boot-devtools 44 | runtime 45 | true 46 | 47 | 48 | io.r2dbc 49 | r2dbc-postgresql 50 | 51 | 52 | org.postgresql 53 | postgresql 54 | runtime 55 | 56 | 57 | org.projectlombok 58 | lombok 59 | true 60 | 61 | 62 | com.maryanto.dimas.plugins 63 | web-commons 64 | 2.0.4-release 65 | 66 | 67 | org.projectlombok 68 | lombok 69 | 70 | 71 | org.mapstruct 72 | mapstruct-processor 73 | 1.3.0.Final 74 | 75 | 76 | org.mapstruct 77 | mapstruct-jdk8 78 | 1.3.0.Final 79 | 80 | 81 | org.apache.commons 82 | commons-lang3 83 | 84 | 85 | 86 | org.springframework.boot 87 | spring-boot-starter-test 88 | test 89 | 90 | 91 | org.junit.vintage 92 | junit-vintage-engine 93 | 94 | 95 | 96 | 97 | org.springframework.boot.experimental 98 | spring-boot-test-autoconfigure-r2dbc 99 | test 100 | 101 | 102 | io.projectreactor 103 | reactor-test 104 | test 105 | 106 | 107 | 108 | 109 | 110 | 111 | org.springframework.boot.experimental 112 | spring-boot-bom-r2dbc 113 | 0.1.0.BUILD-SNAPSHOT 114 | pom 115 | import 116 | 117 | 118 | 119 | 120 | 121 | 122 | repository.dimas-maryanto.com 123 | Mirror Repository Public group maven 124 | http://repository.dimas-maryanto.com:8081/repository/maven-public/ 125 | 126 | 127 | spring-milestones 128 | Spring Milestones 129 | https://repo.spring.io/milestone 130 | 131 | 132 | spring-snapshots 133 | Spring Snapshots 134 | https://repo.spring.io/snapshot 135 | 136 | true 137 | 138 | 139 | 140 | 141 | 142 | spring-milestones 143 | Spring Milestones 144 | https://repo.spring.io/milestone 145 | 146 | 147 | 148 | 149 | 150 | 151 | org.springframework.boot 152 | spring-boot-maven-plugin 153 | 154 | true 155 | 156 | 157 | 158 | org.codehaus.mojo 159 | versions-maven-plugin 160 | 161 | 162 | org.apache.maven.plugins 163 | maven-compiler-plugin 164 | 165 | 8 166 | 8 167 | 168 | 169 | 170 | org.apache.maven.plugins 171 | maven-resources-plugin 172 | 3.1.0 173 | 174 | 175 | @ 176 | 177 | false 178 | 179 | 180 | 181 | org.apache.maven.plugins 182 | maven-dependency-plugin 183 | 184 | 185 | unpack 186 | package 187 | 188 | unpack 189 | 190 | 191 | 192 | 193 | ${project.groupId} 194 | ${project.artifactId} 195 | ${project.version} 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | --------------------------------------------------------------------------------