Maven Build관련 오류 및 log보는법 정리

2021. 9. 15. 11:10Jenkins

반응형

##기존 유지보수 하던 프로젝트를 젠킨스에서 Maven Build를 수행하고 CI/CD의 자동화를 해보려고 했으나.... 버전이나 기타 관리가 잘되는 편이 아니였어서... 하나하나 삽질로 다 수정해봤던 이력들이다##

##오류1번 “package does not exist” 또는 “cannot find symbol”##

기존에 svn 존재하는 파일들 젠킨스에서 clean install or clean package 하려고하는데 컴파일 하는과정에서 오류가 발생함..

 

mvn clean install --log-file 파일명.txt

기존 젠킨스에서 확인가능한 로그가 이부분

 

- 디버깅 로그 파일 생성 

mvn clean install -X > 파일명.txt

상세한 처리결과를 볼수있음

 

로그파일을 남겨서 봤지만 그저

error: cannot find symbol 찾지못한다는 오류만 발생시킴

 

자세히봤더니 cms307내부에 core.jar 묶여있는부분을 인식못해서 발생함.

WEB-INF/lib 폴더에 존재했었음!

 

그래서 pom.xml  해당부분 경로를 직접 지정해줌!

###추가한부분###

<properties>

<java-version>1.7</java-version>

    <spring.maven.artifact.version>4.1.2.RELEASE</spring.maven.artifact.version>

<egovframework.rte.version>3.6.0</egovframework.rte.version>

<org.springframework.security-version>4.0.4.RELEASE</org.springframework.security-version>

<org.aspectj-version>1.8.4</org.aspectj-version>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.youtube.version>v3-rev8-1.12.0-beta</project.youtube.version>

<project.http.version>1.12.0-beta</project.http.version>

            <project.oauth.version>1.12.0-beta</project.oauth.version>

<webapp.lib>${basedir}/src/main/webapp/WEB-INF/lib</webapp.lib> <<추가

</properties>

 

각각 lib폴더내부에있는jar 선언!

<!-- lib폴더내부 추가 -->

<dependency>

                        <groupId>cos</groupId>        <!-- Doesn't matter -->

                        <artifactId>cos</artifactId>   <!-- Doesn't matter -->

        <version>1.0.0</version>        <!-- Doesn't matter -->

        <scope>system</scope>

        <systemPath>${webapp.lib}/cos.jar</systemPath>

 </dependency>

<dependency>

                        <groupId>CUBE_CORE</groupId>        <!-- Doesn't matter -->

                        <artifactId>CUBE_CORE</artifactId>   <!-- Doesn't matter -->

        <version>3.0.7</version>        <!-- Doesn't matter -->

        <scope>system</scope>

        <systemPath>${webapp.lib}/CUBE_CORE.jar</systemPath>

 </dependency>

<dependency>

                        <groupId>kisa-seed</groupId>        <!-- Doesn't matter -->

                        <artifactId>kisa-seed</artifactId>   <!-- Doesn't matter -->

        <version>1.0.0</version>        <!-- Doesn't matter -->

        <scope>system</scope>

        <systemPath>${webapp.lib}/kisa-seed-1.0.0.jar</systemPath>

 </dependency>

<dependency>

                        <groupId>mssql-jdbc</groupId>        <!-- Doesn't matter -->

                        <artifactId>mssql-jdbc</artifactId>   <!-- Doesn't matter -->

        <version>1.0.0</version>        <!-- Doesn't matter -->

        <scope>system</scope>

        <systemPath>${webapp.lib}/mssql-jdbc-7.2.1.jre8.jar</systemPath>

 </dependency>

<dependency>

                        <groupId>NiceID</groupId>        <!-- Doesn't matter -->

                        <artifactId>NiceID</artifactId>   <!-- Doesn't matter -->

        <version>1.0.0</version>        <!-- Doesn't matter -->

        <scope>system</scope>

        <systemPath>${webapp.lib}/NiceID.jar</systemPath>

 </dependency>

<dependency>

                        <groupId>NiceID_ibm</groupId>        <!-- Doesn't matter -->

                        <artifactId>NiceID_ibm</artifactId>   <!-- Doesn't matter -->

        <version>1.0.0</version>        <!-- Doesn't matter -->

        <scope>system</scope>

        <systemPath>${webapp.lib}/NiceID_ibm.jar</systemPath>

 </dependency>

<dependency>

                        <groupId>ojdbc</groupId>        <!-- Doesn't matter -->

                        <artifactId>ojdbc</artifactId>   <!-- Doesn't matter -->

        <version>1.0.0</version>        <!-- Doesn't matter -->

        <scope>system</scope>

        <systemPath>${webapp.lib}/ojdbc-14.jar</systemPath>

 </dependency>

<dependency>

                        <groupId>simplecaptcha</groupId>        <!-- Doesn't matter -->

                        <artifactId>simplecaptcha</artifactId>   <!-- Doesn't matter -->

        <version>1.2.1</version>        <!-- Doesn't matter -->

        <scope>system</scope>

        <systemPath>${webapp.lib}/simplecaptcha-1.2.1.jar</systemPath>

 </dependency>

<dependency>

                        <groupId>tibero6-jdbc</groupId>        <!-- Doesn't matter -->

                        <artifactId>tibero6-jdbc</artifactId>   <!-- Doesn't matter -->

        <version>1.0.0</version>        <!-- Doesn't matter -->

        <scope>system</scope>

        <systemPath>${webapp.lib}/tibero6-jdbc-14.jar</systemPath>

 </dependency>

 

 

해결하는데 참고한 사이트

https://blog.silentsoft.org/archives/19

##오류2번 ##

Mvn -e test

명령어를 사용해서 컴파일 테스트중 아래와 같은 오류가 발생함.

 cannot be converted to Collection<? extends Map<String,Object>>

 

 

찾아낸결과

메이븐 플러그인을 1.8 버전으로 변경하라고 적혀있었음. 스텍오버플로우

기존

               <!--

 <plugin>

                    <groupId>org.apache.maven.plugins</groupId>

                    <artifactId>maven-compiler-plugin</artifactId>

                    <configuration>

                        <source>1.7</source>

                        <target>1.7</target>

                        <encoding>UTF-8</encoding>

                    </configuration>

                </plugin>

-->

변경

              

 <plugin>

                    <groupId>org.apache.maven.plugins</groupId>

                    <artifactId>maven-compiler-plugin</artifactId>

                    <configuration>

                        <source>1.8</source>

                        <target>1.8</target>

                        <encoding>UTF-8</encoding>

                    </configuration>

                </plugin>

 

 

출처: <https://stackoverflow.com/questions/49051936/maven-compilation-error-incompatible-lists>

##오류3번(형변환문제??) ##

변경했으나 그 부분은 해결됬지만 다른부분때문에 아래와같은 에러가 발생했었음.

/C:/Windows/System32/config/systemprofile/AppData/Local/Jenkins/.jenkins/workspace/src/main/java/egovframework/menu/web/MngrMenuController.java:[188,79]

java.util.List<egovframework.itgcms.common.ItgMap> cannot be converted to java.util.Collection<? extends java.util.Map<java.lang.String,java.lang.Object>>

 

List<ItgMap> menulist = MenuService.commTreemenuList(paramMap);

List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();

 

/*resultList.addAll((Collection<? extends Map<String, Object>>) menulist);*/

 

for(Object obj : menulist){

if(obj instanceof Collection){

resultList.add((Map<String, Object>) obj);

}

}

 

기존에 addAll 하는 방식의 코드가 있었는데 형변환이 안이루어졌음.. 코드 상세 변경처리

 

##로그 확인 및 옵션들 리눅스에서 동일환경을 셋팅해두고 maven테스트를 하기 좋음##

///// 테스트 하기

mvn test-compile

projectname/src/main/resources의 자원들을 projectname/target/classes로 복사

projectname/src/main/java의 소스를 컴파일하여 projectname/target/classes로 복사

src/test/resources의 자원을 target/test-classes로 복사

src/test/src/main/java의 소스를 컴파일하여 target/test-classes로 복사

 

mvn test

1) test-compile 후

2) 실행하여 결과 보고(테스트 함)

 

///// 컴파일 하기(.java -> .class )

mvn compile

1) projectname/src/main/resources의 자원들을 projectname/target/classes로 복사

2) projectname/src/main/java의 소스를 컴파일하여 projectname/target/classes로 복사

 

///// 테스트 및 컴파일 데이터 지우기

mvn clean

projectname/target 폴더를 삭제

 

///// 프로젝트 패키징 (jar 또는 war파일로 압축)

mvn package

1) projectname/target 에 패키징된 파일이 저장됨

 

mvn install

1) package 후

2) USER_HOME/.m2/repository/com/test/start/projectname/target 에 패키징된 파일이 복사됨

 

mvn deploy

2) install 후

3) 외부저장소에 복사됨

 

 

///// 유용한 기능 

- 로그 파일 생성

mvn clean install --log-file 파일명.txt

기존 젠킨스에서 확인가능한 로그가 이부분

 

- 디버깅 로그 파일 생성 

mvn clean install -X > 파일명.txt

상세한 처리결과를 볼수있음

 

- 단위 테스트 실행하지 않고 패키징하기

mvn –Dmaven.test.skip=true package

 

- 디펜던씨(의존관계) target폴더로 싹 가져오기

mvn dependency:copy-dependencies 

1) target/dependency 디렉토리가 생성됨

2) jar파일이 복사됨(pom.xml의 <dependencies>에 설정한 것 외에도 설정한 것의 의존 관계의 jar도 복사됨)

 

- 라이브러리 구조를 트리(tree) 형태로 파악

mvn dependency:tree

mvn dependency:resolve

 

출처: https://forgiveall.tistory.com/193 [하하하하하]

 

출처: <https://forgiveall.tistory.com/193>

반응형