회사에서 Gradle 로 keycloak에서 사용할 모듈을 만들었음.
근데..음.. Jenkins 에서 빌드가 안됨
그래들을 사용하여 빌드하면 특정 라이브러리 버전을 가져오지 못하는 현상이 발생하였음.
maven으로 빌드하면 잘됨..
<b>그래서 메이븐으로 빌드하기로 함<b>
여기서 중요한 내용은 코드복사 이런부분보다 pom.xml 파일 작성이다.
메이븐 프로젝트를 생성한다.
GroupId나 artifactId 는 이전에 사용한 것과 똑같이 만들었다.
1. maven 프로젝트 생성 후 src/java/하위 경로에 Gradle 프로젝트에 있는 코드들을 똑같은 패키지로 복사한다.
2. src/resocurces 폴더의 내용도 똑같이 옮겨온다.
Gradle 에 설정한 내용은 아래와 같음
=================================================================================================================
plugins {
id 'java'
}
sourceCompatibility = '1.8'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
ext {
keycloakVersion = '13.0.1'
}
repositories {
mavenCentral()
}
dependencies {
compileOnly("org.keycloak:keycloak-core:${keycloakVersion}")
compileOnly("org.keycloak:keycloak-server-spi:${keycloakVersion}")
compileOnly("org.keycloak:keycloak-services:${keycloakVersion}")
compileOnly("org.jboss.logging:jboss-logging:3.3.2.Final")
implementation("org.keycloak:keycloak-server-spi-private:${keycloakVersion}")
implementation("com.nimbusds:nimbus-jose-jwt:9.4.2")
}
task customFatJar(type: Jar) {
baseName = 'custom-username-password-form'
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
=================================================================================================================
Gradle의 의존성 옵션은 아래와 같다.
compileOnly : compile 시에만 빌드하고 빌드 결과물에는 포함하지 않는다.
implementation : 의존 라이브러리 수정시 본 모듈까지 재빌드, 빌드시 라이브러리에 포함됨
위와같은 내용은 Maven에서 <scope>와 같으며, 들어갈 옵션은 아래와 같음
provided : compile 할 때 필요하지만, 컨테이너 등에서 기본으로 제공되는 모듈임, 결과물에 포함하지 않음
compile : default 설정으로 컴파일 할떄 필요하며 빌드에 포함됨
위의 내용을 확인해봤을 때 아래와 같이 scope 를 설정하면 된다.
compileOnly -> provided
implementation -> compile
※ compile 은 굳이 안넣어도 되긴해서 난 안넣엇음
Gradle 로 빌드를 할때 라이브러리를 포함하여 빌드를 하고 있었다.
그래서 빌드 명령어도 "gradlew customFatJar" 으로 사용했다.
maven 에서 라이브러리를 포함하여 빌드를 하려고 하면 "maven-assembly-plugin" 을 사용해야 한다.
내용은 길어서 아래의 그대로 작성해놓았으며 <pluginManagement> 태그를 보면된다.
다만.. 음 버전이 2.2.1인데 버전을 3이상으로 바꾸면 에러가 나서 그냥 2.2.1로 했다.
추후 시간이되면 바꿀 예정
중요한 부분은 아래와 같다
- dependency에 들어갈 라이브러리
- dependency에서 설정할 scope
- 라이브러리를 포함하여 Build하기위한 maven-assembly-plugin 설정
<dependency> 에 들어갈 정확한 내용은 아래의 사이트에서 검색해서 찾아왔다.
https://mvnrepository.com/
=================================================================================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sungchul.keycloak.spi</groupId>
<artifactId>custom-username-password-form</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>custom-username-password-form-maven</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.keycloak/keycloak-server-spi-private -->
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi-private</artifactId>
<version>13.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.nimbusds/nimbus-jose-jwt -->
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>nimbus-jose-jwt</artifactId>
<version>9.4.2</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
<version>13.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi</artifactId>
<version>13.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.keycloak/keycloak-services -->
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-services</artifactId>
<version>13.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging -->
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.3.2.Final</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html##clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html##Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html##site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
=================================================================================================================