af5695f6bf
- HttpClientAccessTokenServiceWithConfig 신규 - 프로퍼티 그룹 OAuthTokenClient 에서 어댑터그룹별 요청/응답 형태를 읽어 조립 - 값(client_id/secret 등)은 DB, 형태(필드명/전달위치/응답구조)만 프로퍼티로 분리 - 설정이 없으면 WithDefault 와 동일 동작 - 기존 구현체 6종을 설정으로 대체 가능 (WithParamAddBody 는 DB 데이터 정리 선행 필요) - 단위테스트 40건 추가 - build.gradle: libs 의 json-simple 을 테스트 클래스패스에 추가 (테스트 컴파일 불가 상태 해소)
269 lines
11 KiB
Groovy
269 lines
11 KiB
Groovy
plugins {
|
|
id 'java-library'
|
|
id 'maven-publish'
|
|
id 'eclipse-wtp'
|
|
id 'idea'
|
|
id 'com.diffplug.eclipse.apt' version '3.41.1'
|
|
}
|
|
group 'com.eactive'
|
|
version '4.5.1-SNAPSHOT'
|
|
|
|
def springVersion = "5.3.27"
|
|
def quartzVersion = "2.3.2"
|
|
def undertowVersion = "1.4.28.Final"
|
|
def queryDslVersion = "5.0.0"
|
|
def hibernateVersion = "5.6.15.Final"
|
|
|
|
def generatedJavaDir = "$buildDir/generated/java"
|
|
def nexusUrl = "https://nexus.eactive.synology.me:8090"
|
|
|
|
java {
|
|
toolchain {
|
|
languageVersion = JavaLanguageVersion.of(8)
|
|
}
|
|
}
|
|
|
|
compileJava {
|
|
options.encoding = 'UTF-8'
|
|
// generatedJavaDir 는 아래 generatedSourceOutputDirectory 로 APT 가 이미 컴파일함.
|
|
// srcDir 로도 등록하면 낡은 생성물이 입력소스가 돼 APT 재생성 시 duplicate class 발생 → 등록 금지.
|
|
options.generatedSourceOutputDirectory = project.file(generatedJavaDir)
|
|
|
|
aptOptions {
|
|
processorArgs = [ 'querydsl.generatedAnnotationClass' : 'com.querydsl.core.annotations.Generated' ]
|
|
}
|
|
}
|
|
|
|
jar {
|
|
exclude '**/persistence.xml'
|
|
}
|
|
|
|
tasks.withType(JavaCompile) {
|
|
options.encoding = 'UTF-8'
|
|
}
|
|
|
|
dependencies {
|
|
|
|
annotationProcessor "org.projectlombok:lombok:1.18.28", "org.projectlombok:lombok-mapstruct-binding:0.2.0", "org.mapstruct:mapstruct-processor:1.5.5.Final"
|
|
annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jpa", "jakarta.persistence:jakarta.persistence-api:2.2.3", "jakarta.annotation:jakarta.annotation-api:1.3.5"
|
|
|
|
//implementation project(':elink-online-core')
|
|
//implementation project(':elink-online-transformer')
|
|
api project(':elink-online-transformer')
|
|
|
|
// damo-manager.jar 를 제외한 나머지 libs 는 기존대로 컴파일 시점에만 사용한다.
|
|
// (WAS lib 또는 다른 경로에서 런타임에 제공됨)
|
|
compileOnly fileTree(dir: 'libs', include: ['*.jar'], exclude: ['damo-manager.jar'])
|
|
|
|
// damo-manager.jar: 기존에는 tomcat/lib 에 직접 넣어 런타임에 제공했으나,
|
|
// 배포 WAR(eapim-online.war)의 WEB-INF/lib 에 포함시키기 위해 런타임 의존성으로 전환한다.
|
|
// implementation 이므로 이 모듈의 compile/test classpath 와, 이 모듈을 project 의존성으로
|
|
// 참조하는 eapim-online 루트의 runtimeClasspath(= war 패키징 대상)에 함께 포함된다.
|
|
implementation files('libs/damo-manager.jar')
|
|
|
|
api (group: 'org.apache.activemq', name: 'activemq-console', version: '5.14.5'){
|
|
exclude group: 'com.fasterxml.jackson.core'
|
|
}
|
|
api group: 'org.apache.activemq', name: 'activemq-spring', version: '5.14.5'
|
|
|
|
api 'backport-util-concurrent:backport-util-concurrent:3.0'
|
|
|
|
api 'com.github.vladimir-bukhtoyarov:bucket4j-jcache:6.0.2'
|
|
api 'io.github.resilience4j:resilience4j-core:1.7.1'
|
|
api 'io.github.resilience4j:resilience4j-circuitbreaker:1.7.1'
|
|
api 'io.github.resilience4j:resilience4j-micrometer:1.7.1'
|
|
api 'io.micrometer:micrometer-core:1.5.17'
|
|
api 'io.micrometer:micrometer-registry-prometheus:1.5.17'
|
|
|
|
// gson 2.3.1 -> 2.8.9 (CVE-2022-25647: 악의적 데이터 역직렬화 시 메모리 고갈/DoS)
|
|
// 사용처는 Jsons(new Gson), AlarmService(fromJson), TemplateAdapterErrorMsgHandler(JsonParser),
|
|
// alarm/ums/payload/*(@SerializedName) 4곳뿐이고 사용 API 는 그대로 유지된다.
|
|
// (new JsonParser().parse() 는 2.8.9 에서 deprecated 이지만 제거되지 않아 동작에 영향 없음)
|
|
implementation "com.google.code.gson:gson:2.8.9"
|
|
|
|
//api "com.eactive:mina-core-1.0.10-custom:1.0:custom@jar"
|
|
api ("org.apache.mina:mina-filter-ssl:1.0.10") {
|
|
exclude module: 'mina-core'
|
|
}
|
|
|
|
api group: 'commons-fileupload', name: 'commons-fileupload', version: '1.5'
|
|
|
|
api 'org.snmp4j:snmp4j:1.9.1f'
|
|
api group: 'com.lmax', name: 'disruptor', version: '3.4.4'
|
|
api group: 'commons-httpclient', name: 'commons-httpclient', version: '3.1'
|
|
// api group: 'log4j', name: 'log4j', version: '1.2.17'
|
|
|
|
api 'com.nimbusds:nimbus-jose-jwt:9.24.3'
|
|
|
|
// BouncyCastle: bcprov-jdk15on 라인은 1.70에서 종료되어 후속 패치가 없다.
|
|
// jdk18on 라인으로 전환한다(패키지명·프로바이더명("BC") 동일 → 소스 변경 없음,
|
|
// 클래스파일 major 52 / Bundle-RequiredExecutionEnvironment: JavaSE-1.8 이라 JDK 8 유지 가능).
|
|
// 사용처: AESCryptoModuleExtension, ARIACryptoModuleExtension
|
|
// (BouncyCastleProvider 등록, ARIA 알고리즘, FPE 모드의 FPEParameterSpec)
|
|
// 1.70 대비 CVE-2023-33201 / CVE-2024-29857 / CVE-2024-30171 / CVE-2024-30172 해소.
|
|
// bcpkix 는 spring-security-jwt 가 전이로 끌고 오던 1.64 를 대체한다(아래 exclude 참조).
|
|
api 'org.bouncycastle:bcprov-jdk18on:1.78.1'
|
|
api 'org.bouncycastle:bcpkix-jdk18on:1.78.1'
|
|
|
|
api "io.undertow:undertow-servlet:${undertowVersion}"
|
|
// Java-WebSocket 1.3.9 -> 1.5.7 (CVE-2020-11050: 구형 암호화 통신/인증서 검증 결함에 의한 MitM)
|
|
// 사용 API 는 WebSocketServer 상속(onOpen/onClose/onMessage/onError/onStart)과
|
|
// WebSocket 의 send/close/getRemoteSocketAddress/isOpen, start()/stop(timeout) 뿐이라
|
|
// 1.4.0 의 파괴적 변경(WebSocketImpl.DEBUG 제거, Draft_10/17 제거, connections() -> getConnections())
|
|
// 에 해당하는 사용처가 없다. 1.5.x 는 로깅을 SLF4J 로 하는데 이미 클래스패스에 있다.
|
|
api 'org.java-websocket:Java-WebSocket:1.5.7'
|
|
api 'javax.cache:cache-api:1.1.1'
|
|
|
|
api 'org.apache.ignite:ignite-slf4j:2.14.0'
|
|
api 'org.apache.ignite:ignite-kubernetes:2.14.0'
|
|
// ignite 2.17 - JDK 11 이상 필요
|
|
// api 'org.apache.ignite:ignite-slf4j:2.17.0'
|
|
// api 'org.apache.ignite:ignite-kubernetes:2.17.0'
|
|
|
|
//api 'com.eactive:xc3:1.0'
|
|
//api 'com.eactive:xc2:1.0'
|
|
//api 'com.eactive:INICrypto:v4.1.22'
|
|
//api 'com.eactive:INISAFECore:v2.2.28'
|
|
//api 'com.eactive:INISAFENet:v7.2.51_NS'
|
|
//api 'com.eactive:INISAFEPKI:v1.1.33'
|
|
|
|
//api 'com.eactive:Egloan_aes:1.0'
|
|
//api 'com.eactive:ExafeiE2E:1.0'
|
|
//api 'com.eactive:tcseed:1.0'
|
|
//api "com.eactive:backport-util-concurrent:1.0"
|
|
|
|
api "org.quartz-scheduler:quartz:${quartzVersion}"
|
|
|
|
api group: 'commons-cli', name: 'commons-cli', version: '1.1'
|
|
api "org.springframework:spring-web:${springVersion}"
|
|
api "org.springframework:spring-jms:${springVersion}"
|
|
api "org.springframework.security.oauth:spring-security-oauth2:2.3.8.RELEASE"
|
|
|
|
api 'org.yaml:snakeyaml:1.30'
|
|
implementation 'org.codehaus.groovy:groovy:3.0.18'
|
|
|
|
api 'org.slf4j:jul-to-slf4j:1.7.35'
|
|
api 'org.slf4j:jcl-over-slf4j:1.7.35'
|
|
api 'org.slf4j:log4j-over-slf4j:1.7.35'
|
|
api 'org.slf4j:slf4j-api:1.7.35'
|
|
|
|
//compileOnly "tmax:webt:7.0.2.0-r11661-forJEUS8.0"
|
|
//compileOnly "tmax:webtasync:2.0.3.1-r11801-forJEUS8.1"
|
|
//compileOnly "tmax:jeus:1.0"
|
|
|
|
api 'org.apache.httpcomponents.client5:httpclient5:5.1'
|
|
api 'org.apache.httpcomponents.core5:httpcore5:5.1'
|
|
|
|
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
|
|
compileOnly group: 'javax.servlet.jsp', name: 'javax.servlet.jsp-api', version: '2.3.3'
|
|
compileOnly 'javax.resource:javax.resource-api:1.7'
|
|
compileOnly 'javax.jms:javax.jms-api:2.0.1'
|
|
|
|
// jackson-dataformat-xml 제거 (2026-08-27)
|
|
// XmlMapper/JacksonXml* 사용처가 전 소스에 0건이고, 선언 버전(2.13.1)이
|
|
// 실제 해석되는 jackson-core/databind(2.12.7)와 마이너 불일치라 승격 시 위험했다.
|
|
|
|
// bcpkix-jdk15on:1.64 -> bcprov-jdk15on:1.64 를 전이로 끌고 온다.
|
|
// 위에서 jdk18on 으로 전환했으므로 함께 두면 org.bouncycastle.* 클래스가 중복되고
|
|
// 로딩 순서에 따라 구버전이 선택될 수 있다. 전이를 끊고 jdk18on 만 사용한다.
|
|
// (이 exclude 는 발행 POM 에도 기록되어 이 모듈을 참조하는 타 사이트에도 동일 적용된다)
|
|
api ("org.springframework.security:spring-security-jwt:1.1.1.RELEASE") {
|
|
exclude group: 'org.bouncycastle'
|
|
}
|
|
|
|
testRuntimeOnly 'com.h2database:h2:2.1.214'
|
|
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
|
|
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
|
|
testImplementation 'org.springframework.boot:spring-boot-starter-test:2.6.15'
|
|
testImplementation 'junit:junit:4.4'
|
|
testImplementation files('libs/kjb-safedb.jar')
|
|
// libs 는 main 에서 compileOnly 라 테스트 클래스패스에 오르지 않는다.
|
|
// JsonToSetStatusFilterTest 가 org.json.simple.JSONObject 를 쓰므로 테스트에만 추가한다.
|
|
testImplementation files('libs/json-simple-1.1.1-custom-1.2.jar')
|
|
}
|
|
|
|
test {
|
|
useJUnitPlatform()
|
|
}
|
|
|
|
publishing {
|
|
repositories {
|
|
maven {
|
|
name = 'eactiveRepository'
|
|
def releasesRepoUrl = "${nexusUrl}/repository/maven-releases/"
|
|
def snapshotsRepoUrl = "${nexusUrl}/repository/maven-snapshots/"
|
|
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
|
|
credentials(PasswordCredentials)
|
|
}
|
|
}
|
|
|
|
publications {
|
|
mavenJava(MavenPublication) {
|
|
from components.java
|
|
pom {
|
|
description = "eLink common module"
|
|
licenses {
|
|
license {
|
|
name = "Commercial License"
|
|
url = "http://eactive.co.kr"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
task sourcesJar(type: Jar, dependsOn: classes) {
|
|
archiveClassifier = 'sources'
|
|
from sourceSets.main.allSource
|
|
}
|
|
|
|
artifacts {
|
|
archives sourcesJar
|
|
}
|
|
|
|
configurations.all {
|
|
exclude group: 'org.apache.geronimo.specs', module: 'geronimo-jta_1.0.1B_spec'
|
|
// exclude group: 'javax.transaction', module: 'javax.transaction-api'
|
|
resolutionStrategy {
|
|
// 동적 버전 탐색을 10분 캐시
|
|
cacheDynamicVersionsFor 10, 'minutes'
|
|
// 변하는 모듈(Changing Module)을 캐시하지 않음
|
|
cacheChangingModulesFor 0, 'seconds'
|
|
}
|
|
}
|
|
|
|
task settingEclipseEncoding {
|
|
if (project.file('.settings').exists()) {
|
|
File f = file('.settings/org.eclipse.core.resources.prefs')
|
|
f.write('eclipse.preferences.version=1\n')
|
|
f.append('encoding/<project>=utf-8')
|
|
}
|
|
}
|
|
|
|
task initDirs() {
|
|
file(generatedJavaDir).mkdirs()
|
|
}
|
|
|
|
eclipse {
|
|
synchronizationTasks settingEclipseEncoding, initDirs
|
|
jdt {
|
|
apt {
|
|
// generated 된 패스 경로를 .setting/org.eclipse.jdt.apt.core.prefs 의 org.eclipse.jdt.apt.genSrcDir에 적용한다.
|
|
// project > properties > Java Compiler > Annoation Processing 화면에서 확인 가능하다.
|
|
genSrcDir = file(generatedJavaDir)
|
|
}
|
|
}
|
|
project {
|
|
natures = ['org.eclipse.buildship.core.gradleprojectnature',
|
|
'org.eclipse.jdt.core.javanature',
|
|
'org.eclipse.wst.common.project.facet.core.nature',
|
|
'org.eclipse.wst.common.modulecore.ModuleCoreNature',
|
|
'org.eclipse.jem.workbench.JavaEMFNature']
|
|
buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder'
|
|
buildCommand 'org.eclipse.wst.validation.validationbuilder'
|
|
buildCommand 'org.eclipse.wst.common.project.facet.core.builder'
|
|
buildCommand 'org.eclipse.jdt.core.javabuilder'
|
|
}
|
|
}
|