- 전체
- JAVA 일반
- JAVA 수학
- JAVA 그래픽
- JAVA 자료구조
- JAVA 인공지능
- JAVA 인터넷
- Java Framework
- Java GUI (AWT,SWING,SWT,JFACE)
- SWT and RCP (web RAP/RWT)[eclipse], EMF
JAVA 일반 Maven 에 직접 jar 라이브러리 추가하기!!! ( 외부 repository 사용이 안될때) + scope 정리
2020.10.05 21:19
Maven 에 직접 jar 라이브러리 추가하기!!! ( 외부 repository 사용이 안될때) + scope 정리
프록시 등등 여러가지 이유로
외부 레파지토리에서 필요한 디펜던시를 못가지고 오는 경우가 있다.
JDBC 관련된 드라이버들은 등록도 안되있고...
그런 경우,
직접 jar 파일 다운받아서 추가해야되는데..
이게 이상하게 인터넷에 하라는대로 해도 안되는 케이스가 많아서
직접 다 해보고 여기에 정리해본다.
알아서 필요한 방법을 잘 쓰길.
1. maven 이 정식버전이 설치되어 있는 케이스
가장 쉬운 케이스인데, 사용하고자 하는 라이브러리의 디펜던시를 pom.xml 파일에 추가한다.
<dependency> <groupId>group</groupId> <artifactId>artifact</artifactId> <version>2.1</version> </dependency>
필요한 jar 파일 다운받아서 위치를 기억한 뒤,
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
이러면, .m2 같은 로컬 레파지토리에 해당 디펜던시 폴더와 파일이 추가되어 maven dependency 에도 추가된다.
언제나 update maven project 를 해주길.
2. maven 설치 안되있고, eclipse 플러그인으로 사용시
이때도 위와 동일한 방법으로 pom.xml 에 추가한 뒤, maven 실행이 안되기때문에 eclipse 메뉴에서
file/import/maven/install or deploy an artifact to a maven repository
위 경로로 실행한다.
그리고 나서 해당 jar 파일 선택하고, pom 은 자동생성하게 놔두고,
밑에 group,artifact 들을 해당사항에 맞게 적어주고 finish 하면
1번 방법과 동일하게 local 레파지토리에 해당 라이브러리 디펜던시가 추가된다. 그러니 pom.xml 의 에러 ( missing ~ ) 가 사라지고 라이브러리를 사용할 수 있게 된다.
3. 위 2가지 방법이 아닌 경우에는, 강제로 프로젝트 안에 lib 폴더를 추가하거나 해서 사용하는 방법인데, 이론적으로는 되어야 하는데 필자의 경우 어쩔떈 되고, 어쩔때는 안되고,
어떤 피씨에서는 되고 또 어디선 안되는 현상이 자꾸 발생하다보니
짜증나서 안하게 되었다.....
{basedir}/lib 을 in-project 레파지토리로 추가해서 하거나, system scope 에 path 넣어서 쓰는건데, 되다 안되다 하거나... 실제로 build 할때는 포함안되는 현상이 있어서 이런 방법들은 안쓰기로 했다.
( 내가 잘 못해서 그런 것일 수도 있으니 잘되면 사용하셔도 됩니다~ )
* maven 디펜던시 추가시 scope 라는걸 정하는데
이거에 따라서 디펜던시가 다양한 방식으로 추가 된다.
위에 말한 system 의 경우 시스템패쓰를 따라가서 해당 라이브러리를 추가하지만, 막상 빌드할떄는 포함이 안되버린다(시스템에서 제공한다고 생각하는 듯)
기왕 말 나온김에 정리
* compile : 기본영역으로 아무것도 지정되지 않은 경우 사용됨. compile 의존관계에 있는 것은 프로젝트의 모든 클래스에서 사용가능함. 또한, 이와 같은 의존관계는 의존관계에 있는 프로젝트에 포함됨.
* provided : compile 과 매우 유사히지만, 실행시 의존관계를 제공하는 JDK나 컨테이너에 대해서 적용됨. 예를 들어, JEE에 대한 웹 어플리케이션을 만드는 경우, 웹 컨테이너가 서블릿 API와 Java EE API관련 클래스들을 제공하기 때문에 provided 영역으로 의존관계가 세팅되어야 함. 이 영역은 컴파일과 테스트의 클래스패스 용으로 사용되며, 자동영역임.
* runtime : 의존관계가 컴파일시 필요하지 않지만, 실행시 필요함을 의미함. 실행시와 테스트 클래스패스에 속하지만, 컴파일 클래스패스에는 속하지 않음.
* test : 일반적인 어플리케이션 사용에 대해서는 의존관계가 필요없고, 테스트 컴파일과 실행 시점에만 사용됨.
* system : 명시적으로 해당 JAR를 포함하는 것이 제공되어야 한다는 것을 제외하고 provided와 유사함. artifact는 항상 사용가능하며 레파지토리에서 검색하지 않음.
* import (Maven 2.0.9 이후에서만 적용) : 이 영역은 <dependencyManagement>에서 pom의 의존관계에 대해서 사용됨. 지정된 POM이 해당 POM의 <dependencyManagement> 영역에 있는 의존관계로 대체됨을 의미함. 이것들이 대체되기 때문에 import 영역의 의존관계들은 실질적으로 의존에 대한 제약에 대해 관여하지 않음.
출처 : http://homo-ware.tistory.com/43
[출처] https://m.blog.naver.com/kimyoon21/220260631016
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.