Maven central에 없는 라이브러리 포함시키기 - 인텔리제이

공부는 혼자하는 거·2021년 11월 20일
1

업무

목록 보기
2/15

업무 진행 중에, sap 연동해야 되는 상황이 생겼다. 문제는 sap 과 연동할 jar 파일을 maven 중앙저장소에서 땡겨오려고 했더니 403 권한에러가 뜨더라.. 뭔가 가입을 하고, 권한을 받아줘야 되는가 보다. 다행히 그 쪽 기업에서 준 연동 라이브러리가 있는데, 처음에는 직접 경로를 줘서 jar 파일을 포함시켰다. 이러면 문제점이 로컬에서 실행할 때는 잘 되지만, maven install - jar파일로 압축할 떄, 패키지를 못 찾게 되었다.

위의 방법은 취소하고, 직접 프로젝트 안에 lib 폴더를 만들고, jar 파일을 집어넣었다.

그리고 scope과 systemPath를 아래와 같이 주었다.

<!-- https://mvnrepository.com/artifact/com.sap.conn.jco/sapjco3 -->
<dependency>
    <groupId>com.sap.conn.jco</groupId>
    <artifactId>sapjco3</artifactId>
    <version>3.0.14</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/sapjco3.jar</systemPath>
</dependency>

역시나 요렇게만 해주면 build 시에는 문제없이 잘 동작하지만, 아카이브, 패키징 하면 라이브러리를 못 찾는다.. 따라서, true 설정을 해줘야 된다.

		<configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>

이제는 잘 package을 해준다 ㅎㅎ, 그러나 잘 말아진 jar 파일을 실행하니 또 문제점이 발생했다.

Illegal JCo archive "sapjco3-3.0.14.jar". It is not allowed to rename or repackage the original archive "sapjco3.jar".

라이브러리 이름을 바꾸지 못하게하는 SAP의 sapjco3.jar 정책이 발목을 잡았다.. 온갖 시도를 다 해봤다. version 정보를 공백으로 줄 수 있는 방법만 찾다가 뜻 밖의 해결책을 발견했다.

<artifactId>com.sap.conn.jco.sapjco3.jar</artifactId>

대체 솔루션

maven을 사용할 때 이 유효성 검사를 방지하려면 아티팩트 이름의 파일 이름 "com.sap.conn.jco"에 다음 접두사를 추가하여 최종 파일 이름이 com.sap.conn.jco.sapjco3-3.xxjar이 되도록 합니다.

이제는 잘 된다.. ㅎ 그런데 어쩐 일인지, 우분투에서 배포를 하니, 이미 깔아놨던 so 파일을 찾지 못해서인지 에러를 일으키더라.. mainfest 설정파일을 수정했다. pom.xml 에 아래 plugin 정보를 추가했다. 요 부분은 다른 분이 작업하신 거라, 나도 원인을 잘 찾지는 못하겠다..

                        <plugin>
				            <groupId>org.apache.maven.plugins</groupId>
				            <artifactId>maven-jar-plugin</artifactId>
				            <configuration>
				                <archive>
				                    <manifest>
				                        <addClasspath>true</addClasspath>
				                    </manifest>
				                    <manifestEntries>
				                        <Built-By>Me</Built-By>
				            			<Class-Path>/server/tomcat/lib/system/sapjco3.jar</Class-Path> 
				                    </manifestEntries>
				                </archive>
				            </configuration>
				        </plugin>

참고

https://stackoverflow.com/questions/65003590/quarkus-and-provided-dependencies-sapjco3-jar
위의 링크 참조

https://yujuwon.tistory.com/entry/maven에-custom-jar를-집어넣어-보자

https://stackoverflow.com/questions/4955635/how-to-add-local-jar-files-to-a-maven-project

https://www.hanumoka.net/2020/01/24/maven-20200124-java-maven-local-repository/

https://slf4me.com/post/spring-boot/maven-include-system-library/

https://joohoon.tistory.com/35

http://www.yunsobi.com/blog/647

https://sleepyeyes.tistory.com/43

profile
시간대비효율

0개의 댓글