프로젝트의 라이브러리 소스에 로컬 jar 파일 (아직 Maven 저장소의 일부는 아님)을 직접 추가하려면 어떻게해야합니까?
답변
다음과 같이 JAR을 로컬 Maven 저장소에 설치하십시오.
mvn install:install-file \
-Dfile=<path-to-file> \
-DgroupId=<group-id> \
-DartifactId=<artifact-id> \
-Dversion=<version> \
-Dpackaging=<packaging> \
-DgeneratePom=true
각각은 다음을 참조합니다.
<path-to-file>
:로드 할 파일의 경로. 예 : → c:\kaptcha-2.3.jar
<group-id>
: 파일을 등록해야하는 그룹 예 : → com.google.code
<artifact-id>
: 파일의 이슈 이름 예 → kaptcha
<version>
: 파일 버전 예 → 2.3
<packaging>
: 파일 포장 예 → jar
참고
- Maven FAQ : 로컬 리포지토리에 넣을 항아리가 있습니다. 어떻게 복사 할 수 있습니까?
- 플러그인 사용을 설치 받는다는 : 목표
install:install-file
답변
다음과 같이 로컬 종속성을 직접 추가 할 수 있습니다 ( 소유권 라이브러리가 포함 된 빌드 메이븐 프로젝트에 언급 된대로 ).
<dependency>
<groupId>com.sample</groupId>
<artifactId>sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath>
</dependency>
최신 정보
새 릴리스에서는이 기능이 더 이상 사용되지 않는 것으로 표시되었지만 여전히 작동하지만 아직 제거되지 않았습니다 (maven을 시작하는 동안 로그에 경고 만 표시됨). https://issues.apache.org/jira/browse/MNG-6523 에 대해 maven 그룹에서 문제가 발생했습니다. (이 기능이 어떤 경우에 도움이되는 이유에 참여하고 설명 할 수 있음). 이 기능이 남아 있기를 바랍니다!
기능이 제거되지 않는 한 저에게 묻는다면 저장소에 맞지 않는 프로젝트의 하나의 장난 꾸러기 jar 파일 에만 의존하게 합니다. 이 기능이 제거되면 나중에 선택할 수있는 좋은 답변이 많이 있습니다!
답변
먼저 익명의 스택 오버플로 사용자 에게이 답변에 대한 크레딧을 제공하고 싶습니다. 이전에 비슷한 답변을 보았지만 이제는 찾을 수 없습니다.
로컬 JAR 파일을 종속성으로 사용하는 가장 좋은 옵션은 로컬 Maven 저장소를 작성하는 것입니다. 이러한 저장소는 pom 파일이 들어있는 올바른 디렉토리 구조에 지나지 않습니다.
내 예 : ${master_project}
위치에 마스터 프로젝트가 있고 subproject1이 켜져 ${master_project}/${subproject1}
있습니다.
그런 다음 Maven 저장소를 다음 위치에 만듭니다
${master_project}/local-maven-repo
.
에 위치한 subproject1의 pom 파일에서 ${master_project}/${subproject1}/pom.xml
파일 경로를 URL 매개 변수로 사용하는 저장소를 지정해야합니다.
<repositories>
<repository>
<id>local-maven-repo</id>
<url>file:///${project.parent.basedir}/local-maven-repo</url>
</repository>
</repositories>
다른 리포지토리와 마찬가지로 종속성을 지정할 수 있습니다. 이것은 pom 저장소를 독립적으로 만듭니다. 예를 들어 Maven central에서 원하는 JAR을 사용할 수 있으면 로컬 저장소에서 삭제하면 기본 저장소에서 가져옵니다.
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.servicebinder</artifactId>
<version>0.9.0-SNAPSHOT</version>
</dependency>
마지막으로 할 일은 -DlocalRepositoryPath 스위치를 사용하여 JAR 파일을 로컬 저장소에 추가하는 것입니다.
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file \
-Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
-DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
-Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
-DlocalRepositoryPath=${master_project}/local-maven-repo
JAR 파일이 설치되면 Maven 저장소는 코드 저장소에 커밋 될 수 있으며 전체 설정은 시스템 독립적입니다. ( GitHub의 실례 ).
JAR을 소스 코드 저장소에 커밋하는 것이 좋은 습관은 아니지만 실제로는 게시 할 수없는 하나의 JAR을 호스팅하는 완전한 Nexus 저장소보다 빠르고 더러운 솔루션이 더 나은 경우가 있습니다.
답변
local-maven-repo
Maven 프로젝트의 루트에서 새 폴더를 만듭니다 .
귀하 <project>
의 내부에 로컬 저장소를 추가 하십시오 pom.xml
.
<repositories>
<repository>
<id>local-maven-repo</id>
<url>file:///${project.basedir}/local-maven-repo</url>
</repository>
</repositories>
그런 다음 설치하려는 각 외부 jar에 대해 프로젝트의 루트로 이동하여 다음을 실행하십시오.
mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]
답변
그런 해결책을 원합니다 maven-install-plugin
-pom 파일에서 사용 하십시오 :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>lib/yourJar.jar</file>
<groupId>com.somegroup.id</groupId>
<artifactId>artefact-id</artifactId>
<version>x.y.z</version>
<packaging>jar</packaging>
</configuration>
</execution>
</executions>
</plugin>
이 경우 수행 할 수 mvn initialize
있으며 jar은 로컬 maven repo에 설치됩니다. 이제이 jar 은이 컴퓨터의 maven 단계에서 사용할 수 있습니다 ( <dependency></dependency>
태그가 있는 pom에 다른 maven 종속성 으로이 종속성을 포함시키는 것을 잊지 마십시오 ). jar 설치를 initialize
단계가 아닌 원하는 다른 단계 에 바인딩 할 수도 있습니다 .
답변
<dependency>
<groupId>group id name</groupId>
<artifactId>artifact name</artifactId>
<version>version number</version>
<scope>system</scope>
<systemPath>jar location</systemPath>
</dependency>