Maven 프로젝트에 로컬 jar 파일을 추가하는 방법은 무엇입니까?


1171

프로젝트의 라이브러리 소스에 로컬 jar 파일 (아직 Maven 저장소의 일부는 아님)을 직접 추가하려면 어떻게해야합니까?


1
안녕하세요 @Praneel PIDIKITI, 가장 많은 투표권을 가진 사람으로 수락 된 답변을 변경할 수 있습니까?
null

1
@nslntmnx 모든 솔루션에 단점이 있으므로 더 나은 솔루션은 아닙니다. stackoverflow.com/questions/364114/…
Paul Verest

libs가 때때로 업데이트되거나 확장되는 경우이 답변 을 참조하십시오 . "pomified"방식 으로 maven으로 libs 프로젝트 폴더에서 모든 JAR을로드 하고 추가 repo 폴더와 번거로운 cmd 행 또는 install-file스크립트를 피하십시오.
GeroldBroser는 Monica를

답변:


699

다음과 같이 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

참고


7
내 빌드에 설치하는 지침에는 generatePom 부분을 제외한 모든 것이 있습니다. 그것은 결정적인 것으로 보인다.
Jason D

4
<파일 경로> 무엇을 의미합니까? C : /Users/XXX/WorkspaceDocx/maven/src/main/resources/myJar.jar ...... 또는 $ {project.basedir} /src/main/resources/myJar.jar
처럼

17
대답은 README를 언급하지 않았거나 항아리가 가져 왔다는 것입니다. 그러나 프로젝트가 항아리를 가져 오는 경우 stackoverflow.com/a/36602256/1000011 에서 언급 한 것처럼 프로젝트에 저장소를 넣을 수도 있습니다 . 프로젝트는 항아리처럼 작동하므로 README가 필요하지 않습니다. 별도의 수동 단계없이 중앙에있었습니다.
opticyclic

8
@opticyclic 댓글에 더 많은 의견이 필요하거나이 답변을 수정해야합니다. 로컬 Maven 리포지토리에 설치하는 것이 다른 모든 사람에게 포함되지 않는다는 것을 모르는 초보자에게는 재난의 요리법입니다.
Mike S


1427

다음과 같이 로컬 종속성을 직접 추가 할 수 있습니다 ( 소유권 라이브러리가 포함 된 빌드 메이븐 프로젝트에 언급 된대로 ).

<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 파일 에만 의존하게 합니다. 이 기능이 제거되면 나중에 선택할 수있는 좋은 답변이 많이 있습니다!


49
예를 들어 오래된 항아리를 구체적으로 테스트하고 싶을 때가 있으며이 대답이 그에 적합하다고 생각합니다. 내가 필요한 것입니다. 공감
John Lockwood

36
보기 좋고 쉬운이 솔루션에는 yourJar.jar 파일이 앱의 WAR 파일에 포함되지 않는다는 문제가 있습니다.
Matthias

40
솔루션은 더 이상 작동하지 않습니다보다도, 그것은 반환 : " 'dependencies.dependency.systemPath을'프로젝트 디렉토리 내 파일에 xx.jar해야하지 포인트"이것은 이미 처리 된 stackoverflow.com/questions/10935135/...
사라 .ferguson

8
이 대답에서, artifactId그리고 groupId잘못된 길은 아닌가?
theonlygusti

5
Maven docu ( maven.apache.org/guides/introduction/… ) 에 따르면 : 중요 사항 :이 기능은 더 이상 사용되지 않습니다.
agassner

142

먼저 익명의 스택 오버플로 사용자 에게이 답변에 대한 크레딧을 제공하고 싶습니다. 이전에 비슷한 답변을 보았지만 이제는 찾을 수 없습니다.

로컬 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 저장소보다 빠르고 더러운 솔루션이 더 나은 경우가 있습니다.


받는다는의 repo 같은 지역의 상대적인 디렉토리는 ... 많이 도왔
sura2k

4
pom.xml에서이 작업을 수행하려면 baeldung.com/install-local-jar-with-maven을
Kai Wang

@Kai Wang이 솔루션은 더 잘 작동합니다! 이것을 답변으로 추가해야 할 수도 있습니다.
lockwobr

7
때문에 ${project.parent.basedir}요즘은 아무것도 해결하지 않는 것 내가 사용 ${project.basedir}/..하고 완벽하게 일했다.
팔러

1
팁 : $ HOME / .m2 / settings.xml을 확인하십시오. "local-maven-repo"가 settings / mirrors / mirror에 의해 미러링되지 않도록하십시오 <mirrorOf>*</mirrorOf>.
btpka3 '12

125

local-maven-repoMaven 프로젝트의 루트에서 새 폴더를 만듭니다 .

귀하 <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]

16
이것은 배치를 사용할 때 리포지토리를 올바르게 생성하므로 여기에 대한 정답입니다.
opticyclic

코드가 CI 빌드 서버를 사용하여 배포 된 경우이 방법이 작동합니까? 자동화 된 빌드가 종속성에 액세스 할 수없는 것 같습니다.
Wallace Howery

2
@ user2748659 yes CI 빌드 서버에서 폴더 local-maven-repo가 소스 폴더 (이 예에서는 하위 폴더 )에 포함되어있는 경우
Anthony O.

3
이 대답은 나를 위해 일한 것입니다. 공유 프로젝트의 경우 프로젝트 디렉토리에 리포지토리를 추가하고 버전 제어에 추가하면 프로젝트를 체크 아웃하는 사람에게 종속성이 누락되지 않습니다. 많은 의존성이있는 경우 공유 원격 리포지토리가 더 나은 솔루션 일 수 있습니다. 그렇지 않으면 프로젝트 디렉토리에 리포지토리를 유지하는 것이 좋습니다.
Aquarelle

2
이렇게하려면 -Dpackaging = jar를 추가해야합니다. 그렇지 않으면 "아티팩트 정보가 불완전하거나 유효하지 않습니다 : 포장이 없습니다"라는 메시지가 나타납니다.
J Woodchuck

43

그런 해결책을 원합니다 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단계가 아닌 원하는 다른 단계 에 바인딩 할 수도 있습니다 .


2
이것은 나를 위해 잘 작동하지만 mvn initialize이전에 실행 한 경우에만 mvn package: mvn initialize package중앙 저장소에서 JAR을 다운로드 할 수 없거나 그렇지 않습니다 . 왜 이런거야? 나는이 목표 / 단계를 순서대로 수행 할 것이라고 생각했습니다.
DavidS

1
실제로 순서대로 실행해야합니다. 기본 수명주기 목록을 살펴보십시오. maven.apache.org/guides/introduction/… 다른 단계를 사용하여 바인딩 할 수 있습니다.
스핑크스

2
나는 모든 방법을 시도했지만 결국이 솔루션에 의지해야했습니다. 주된 이유는 오프라인 모드에서 패키지를 로컬로 빌드 할 수 있기를 원했기 때문입니다. 로컬로 정의 된 저장소와의 종속성으로 선언하면 항상 다른 온라인 저장소로 간주되었으며 maven 빌드는 아티팩트를 찾지 않는 것에 대해 불평했습니다. 이 솔루션은 모든 경우에 적합합니다.
Mauli

2
불필요한 단계에서 mvn 패키지를 사용할 때마다 초기화가 실행되므로 깨끗한 단계 를 사용하는 것이 좋습니다 . 마지막으로 jar / war 만 생성하면 직접 mvn clean package를 사용할 수 있습니다 .
Deoxyseia

" jar 설치를 바인딩하여 단계를 초기화하지 않고 다른 단계를 원하는대로 묶을 수도 있습니다. "반드시 그렇지는 않습니다. 종속성이 아직 저장소에없고 종속성을 해결하는 단계 (예 :) 이후에 나오는 단계가 사용 compile되면 빌드가 실패합니다.
GeroldBroser는 Monica를

29
<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>

6
<scope>system더 이상 사용되지 않습니다.
GeroldBroser는 Monica를

@GeroldBroser-알았어. 그 대신에 무엇을 사용할 수 있습니까?
MasterJoe2

2
@ MasterJoe2 또한 언급 한 것처럼 로컬 저장소에 아티팩트를 응답 install:install-file 하고이를 "일반"종속성 (기본 범위 포함 compile)으로 사용하거나 프로젝트 내 저장소 솔루션을 사용하십시오 .
GeroldBroser는 Monica를


14

정말 빠르고 더러운 방법은 로컬 파일을 가리키는 것입니다.

<dependency>
      <groupId>sample</groupId>  
       <artifactId>com.sample</artifactId>  
       <version>1.0</version> 
      <scope>system</scope>
      <systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>

그러나 이것은 일반적으로 적절한 m2 아카이브 (nexus / artifactory)를 사용하거나 로컬 아카이브를 설정하지 않으려는 경우 공유하기 때문에 기계에만 (명백하게) 살아 있습니다. 구조화 된 아카이브 및 pom에서 "저장소"구성 : 로컬 :

<repositories>
    <repository>
        <id>my-local-repo</id>
        <url>file://C:/DEV//mymvnrepo</url>
    </repository>
</repositories>

먼:

<repositories>
    <repository>
        <id>my-remote-repo</id>
        <url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
    </repository>
</repositories>

이를 위해 basedir 변수를 사용하여 상대 경로도 가능합니다.

<url>file:${basedir}</url>

로컬 저장소 URL의 경우 상대 URL이거나 절대적이어야합니까?
Dragas

@Dragas 시도하지 않은 경우 알려주십시오.
fl0w

1
예, 분명히 <url>file:${basedir}</url>기본 URL 로 사용해야 합니다.
Dragas

11

POM 파일에 자체 로컬 JAR을 추가하고 maven 빌드에서 사용하십시오.

mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar

예를 들면 다음과 같습니다.

mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar

그런 다음 POM에 다음과 같이 추가하십시오.

여기에 이미지 설명을 입력하십시오


아티팩트 설치 실패 (액세스 거부) 오류가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? @Aurasphere
Ramzah Rehman

1
@RamzahRehman은 마우스 오른쪽 버튼을 클릭하고 "관리자 권한으로 실행"을 선택하여 admi 권한으로 명령 프롬프트를 열어보십시오
Aurasphere

9

한 가지 방법은 자신의 Maven 저장소 관리자 (예 : Nexus)에 업로드하는 것입니다. 어쨌든 자체 저장소 관리자가있는 것이 좋습니다.

내가 최근에 본 또 다른 좋은 방법은 빌드 수명주기에 Maven Install Plugin을 포함시키는 것입니다. POM에서 파일을 로컬 저장소에 설치하도록 선언합니다. 오버 헤드가 적지 만 수동 단계가 필요하지 않습니다.

http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html


4
gradle로 전환하십시오. 작동하지 않습니다 로컬 jar이 종속성으로 정의되어 있으면 maven은 종속성을 해결하기 전에 플러그인을 실행하지 않으므로 수동 설치를 피할 수 없습니다. 이 상황에 대한 토론을 찾았습니다 : stackoverflow.com/questions/5951999/…
xinthink 16:15에


6

또 다른 흥미로운 경우는 프로젝트에 개인용 메이븐 병을 넣고 싶을 때입니다. 전이 의존성을 해결하기 위해 Maven의 기능을 유지하려고 할 수 있습니다. 해결책은 매우 쉽습니다.

  1. 프로젝트에서 폴더 라이브러리 생성
  2. pom.xml 파일에 다음 줄을 추가하십시오

    <properties><local.repository.folder>${pom.basedir}/libs/</local.repository.folder>
    </properties>
    
    <repositories>
       <repository>
            <id>local-maven-repository</id>
            <url>file://${local.repository.folder}</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
       </repository>
    </repositories>
  3. .m2 / repository 폴더를 열고 libs 폴더 로 가져 오려는 프로젝트의 디렉토리 구조를 복사하십시오 .

예를 들어 의존성을 가져오고 싶다고 가정하십시오.

<dependency>
    <groupId>com.mycompany.myproject</groupId>
    <artifactId>myproject</artifactId>
    <version>1.2.3</version>
</dependency>

.m2 / repository 로 이동 하면 다음 폴더가 나타납니다.

com / mycompany / myproject / 1.2.3

.m2 / repository 아래의 폴더를 포함하여 libs 폴더의 모든 것을 복사 하면 완료됩니다.


6

명령 줄 :

mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion={version} -Dpackaging=jar

5

의존성에서 중요한 부분은 $ {pom.basedir} ($ {basedir} 대신)입니다.

<dependency>
    <groupId>org.example</groupId>
    <artifactId>example</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${pom.basedir}/src/lib/example.jar</systemPath>
</dependency>

4

이 문제에 대한 더 나은 해결책은 maven-install-plugin을 사용하는 것입니다. 을 사용하여 설치시 파일을 자동으로 설치하는 것입니다. 이것이 내가 프로젝트를 위해 설정 한 방법입니다.

먼저 경로 (로컬 .jar를 저장하는 위치)를 속성으로 추가하십시오.

<properties>
    <local.sdk>/path/to/jar</local.sdk>
</properties>

그런 다음 plugins컴파일 할 때 항아리 추가 플러그인을 추가하십시오.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>1</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId> 
                <artifactId>appengine-api</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api.jar</file>
            </configuration>
        </execution>
        <execution>
            <id>appengine-api-stubs</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId>
                <artifactId>appengine-api-stubs</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api-stubs.jar</file>
            </configuration>
        </execution>
    </executions>
</plugin>

마지막으로 종속성에서 항아리를 추가 할 수 있습니다

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api</artifactId>
    <version>1.0</version>
</dependency>

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api-stubs</artifactId>
    <version>1.0</version>
    <scope>test</scope>
</dependency>

이와 같이 프로젝트를 설정하면 프로젝트가 다른 컴퓨터로 가져와도 프로젝트가 계속 빌드됩니다 (속성에 지정된 경로에 모든 jar 파일이있는 경우) local.sdk ).

에 대한 groupId 사용하는 고유 한 이름은 반드시 충돌이 없는지 확인합니다.

이제 당신 mvn install이나 mvn test로컬 항아리가 자동으로 추가됩니다.


3

선호하는 방법은 자신의 원격 저장소를 작성하는 것입니다.

수행 방법에 대한 자세한 내용 은 여기 를 참조 하십시오 . ' 원격 리포지토리에 업로드 '섹션을보십시오.


3

항아리로 가득 찬 폴더를 업로드 할 수있는 코드를 공유하고 싶습니다. 공급자에 공용 리포지토리가없고 많은 라이브러리를 수동으로 추가해야 할 때 유용합니다. 메모리 부족 오류가 발생할 수 있으므로 maven을 직접 호출하는 대신 .bat를 작성하기로 결정했습니다. Windows 환경을 위해 준비되었지만 Linux OS에 맞게 쉽게 조정할 수 있습니다.

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;

public class CreateMavenRepoApp {

    private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars";

    public static void main(String[] args) throws IOException {

    File directory = new File();
    //get all the files from a directory
    PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8");
    writer.println("rem "+ new Date());  
    File[] fList = directory.listFiles();
    for (File file : fList){
        if (file.isFile()){               
        String absolutePath = file.getAbsolutePath() ;
        Manifest  m = new JarFile(absolutePath).getManifest();
        Attributes attributes = m.getMainAttributes();
        String symbolicName = attributes.getValue("Bundle-SymbolicName");

        if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) {
            String[] parts =symbolicName.split("\\.");
            String artifactId = parts[parts.length-1];
            String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);
            String version = attributes.getValue("Bundle-Version");
            String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
            writer.println(mavenLine);          
        }

        }
    }
    writer.close();
    }

}

IDE에서이 메인을 실행 한 후 update_repo_maven.bat를 실행하십시오.


귀하의 코드 String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))사용자 정의 jar 만 지원됨 을 나타냅니다 . 그것은 우리가 필요로하는 것이 아닙니다. 대신 많은 타사 항아리입니다. 이런 식으로 항아리 를 설치 하는 방법에 대한 제안 이 있습니까?
javadba

나는 당신의 코드를 수정했습니다 : 나는 바닥에 답을 넣었습니다.
javadba

3

이것은 최신 버전의 짧은 구문입니다.

mvn install:install-file -Dfile=<path-to-file>

JAR이 Apache Maven에 의해 빌드되었을 때 작동합니다. 가장 일반적인 경우입니다. 그런 다음 META-INF 디렉토리의 하위 폴더에 pom.xml이 포함되며 기본적으로 읽 힙니다.

출처 : http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html


2

또한 살펴보십시오 ...

<scope>compile</scope>

메이븐 의존성 . 이것은 기본값이지만 로컬 저장소에서 로컬 라이브러리를 찾기 위해 Maven도 범위를 명시 적으로 설정하는 경우가 있습니다.


2

어떤 이유로 든 유지 보수를 제공하는 웹 응용 프로그램에서 Alireza Fattahi의 솔루션 이나 JJ Roman의 솔루션 모두 올바르게 작동 하지 않았습니다 . 두 경우 모두 컴파일이 정상적으로 진행되지만 (병을 볼 수 있음) 포장에 병이 포함되지 않습니다.

내가 그것을 성공시킬 수있는 유일한 방법은 항아리를 /src/main/webapp/WEB-INF/lib/씌운 다음 Fattahis 또는 Roman의 솔루션과 결합하는 것입니다.


1

로컬 리포지토리를 사용하는 것이 반드시 좋은 것은 아닙니다. 이 프로젝트가 다른 사람들과 공유되면 작동하지 않을 때 다른 모든 사람들이 문제와 질문을하게되며 소스 제어 시스템에서도 항아리를 사용할 수 없습니다!

공유 리포지토리가 가장 좋은 대답이지만 어떤 이유로 든이 작업을 수행 할 수없는 경우 로컬 리포지토리보다 항아리를 포함시키는 것이 좋습니다. 로컬 전용 저장소 내용은 특히 시간이 지남에 따라 많은 문제를 일으킬 수 있습니다.


1
소스 제어 시스템에 jar를 추가하면 라이브러리는 항상 소스와 함께 사용 가능합니다. 소스 없음, 라이브러리 없음 대신 maven을 사용하면 소스가 정상이지만 저장소를 사용할 수 없습니다.
sarah.ferguson

@ Frank ... 외부 의존성 (라이브러리 파일)을 포함하지 않고 실행 파일을 만드는 방법에 대한 아이디어가 있습니까?
Satish Karuturi

maven을 처음 접하고 원래 질문에 대한 답을 찾고있는 사람에게 "병을 포함시키는 것"은 무엇을 의미합니까?
cdock

1

로컬 저장소에서 명령을 실행하여 jar을 설치할 수 있습니다.

 mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

이 유용한 링크 를 따라 mkyoung의 웹 사이트에서 동일한 작업을 수행하십시오. 당신은 또한 같은 maven 가이드를 확인할 수 있습니다


1

타사 jar를 설치하려면 다음과 같은 명령을 호출하십시오

mvn install:install-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=path

1
  1. mvn 설치

명령 줄에 아래 코드를 작성하거나 Eclipse 내장 maven을 사용하는 경우 프로젝트-> 실행 도구-> 구성 실행 ...을 마우스 오른쪽 버튼으로 클릭하고 왼쪽 패널에서 Maven 빌드-> 새 구성을 마우스 오른쪽 버튼으로 클릭하십시오-> 목표 및 기본 디렉토리의 코드 : $ {project_loc : NameOfYourProject}-> 실행

mvn install:install-file
   -Dfile=<path-to-file>
   -DgroupId=<group-id>
   -DartifactId=<artifact-id>
   -Dversion=<version>
   -Dpackaging=<packaging>
   -DgeneratePom=true

각각은 다음을 참조합니다.

<경로-파일> :로드 할 파일의 경로-예 :-> c : \ kaptcha-2.3.jar

<group-id> : 파일을 등록해야하는 그룹 (예 :-> com.google.code)

<artifact-id> : 파일의 이슈 이름 예-> kaptcha

<version> : 파일 버전 예-> 2.3

<포장> : 파일 포장 예-> jar

2. 설치 후 pom.xml에 jar를 선언하십시오.

 <dependency>
      <groupId>com.google.code</groupId>
      <artifactId>kaptcha</artifactId>
      <version>2.3</version>
 </dependency>

1

1 단계 :maven-install-plugin 의 목표 install-file로 구성pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <executions>
        <execution>
            <id>install-external-non-maven-jar-MWS-Client-into-local-maven-repo</id>
            <phase>clean</phase>
            <configuration>
                <repositoryLayout>default</repositoryLayout>
                <groupId>com.amazonservices.mws</groupId>
                <artifactId>mws-client</artifactId>
                <version>1.0</version>
                <file>${project.basedir}/lib/MWSClientJavaRuntime-1.0.jar</file>
                <packaging>jar</packaging>
                <generatePom>true</generatePom>
            </configuration>
            <goals>
                <goal>install-file</goal>
            </goals>
        </execution>
    </executions>
</plugin>

file실제 파일 경로를 기준으로 경로 를 편집하십시오 (권장되지 않은 외부 항아리를 일부 폴더 안에 lib배치하고 lib프로젝트 특정 상대 경로를 사용하고 시스템 추가를 피하도록 프로젝트 내에이 폴더를 배치하는 것이 좋습니다) 특정 절대 경로.

여러 개의 외부 <execution>항아리가있는 경우 동일한 내의 다른 항아리에 대해 반복하십시오 maven-install-plugin.

2 단계 : 파일 maven-install-plugin에서 위와 같이 구성한 후에 는 평소와 같이 pom.xml이러한 jar을 사용해야합니다 pom.xml.

    <dependency>
        <groupId>com.amazonservices.mws</groupId>
        <artifactId>mws-client</artifactId>
        <version>1.0</version>
    </dependency>

참고 그 maven-install-plugin지역 만 복사합니다 외부 항아리를.m2 받는다는 저장소. 그게 다야. 이 항아리는 프로젝트에 대한 maven 종속성으로 자동으로 포함되지 않습니다.

사소한 점이지만 때로는 놓치기 쉽습니다.


0

내 pom.xml의 종속성 집합에 대해 동일한 오류가 발생했습니다. 종속성의 버전이 pom.xml에 지정되지 않았으며 상위 저장소에서 언급되었습니다. 어떤 이유로 버전 세부 사항이이 저장소와 동기화되지 않았습니다. 따라서 수동으로 태그를 사용하여 버전을 입력했으며 매력처럼 작동했습니다. 부모에서 버전을 조회하고 여기에 지정하는 데 약간의 시간이 필요했습니다. 그러나 artifactid 오류를 표시하는 항아리에 대해서만 수행 할 수 있으며 작동합니다. 이것이 누군가를 돕기를 바랍니다.


0

Apache Maven 3.5.4에서는 큰 따옴표를 추가해야했습니다. 큰 따옴표가 없으면 그것은 나를 위해 일하지 않았다.

예 : mvn install : install-file "-Dfile = jar 파일의 위치" "-DgroupId = group id" "-DartifactId = artifact id" "-Dversion = version" "-Dpackaging = package type"


0
  1. 로컬 Maven 저장소 디렉토리를 만듭니다. 프로젝트 루트는 다음과 같이 시작해야합니다.
yourproject
+- pom.xml
+- src
  1. 그룹 com.example 및 버전 1.0에 대해 repo라는 표준 Maven 저장소 디렉토리를 추가하십시오.
yourproject
+- pom.xml
+- src
+- repo
  1. 아티팩트 배포 Repo에 Maven은 mvn deploy : deploy-file 목표를 사용하여 아티팩트를 배포 할 수 있습니다.
mvn deploy:deploy-file -Durl=file:///pathtoyour/repo -Dfile=your.jar -DgroupId=your.group.id -DartifactId=yourid -Dpackaging=jar -Dversion=1.0
  1. 프로젝트가 로컬 저장소에서 maven 빌드 중에 jar을 찾을 수 있도록 jar에 해당하는 pom 파일을 설치하십시오.
mvn install:install-file -Dfile=/path-to-your-jar-1.0.jar -DpomFile=/path-to-your-pom-1.0.pom
  1. pom 파일에 저장소를 추가하십시오.
<repositories>
    <!--other repositories if any-->
    <repository>
        <id>project.local</id>
        <name>project</name>
        <url>file:${project.basedir}/repo</url>
    </repository>
</repositories>
  1. 치어에 의존성을 추가하십시오 :
<dependency>
    <groupId>com.groupid</groupId>
    <artifactId>myid</artifactId>
    <version>1.0</version>
</dependency>

-2

이 답변은 일식 사용자만을위한 것입니다.

Eclipse를 사용하는 경우 jar을 lib /에 놓고 jar 이름을 마우스 오른쪽 단추로 클릭하고 "빌드에 추가 경로"를 클릭하십시오. Eclipse는 "참조 라이브러리"를 작성하고 사용자를 위해 jar를 배치합니다.

그것은 나를 위해 프로그램에서 항아리의 수입을 즉시 해결했습니다.


5
그것은 Eclipse의 항목을 추가 할 것이지만, maven에 대한 정의가 없으므로 maven은 의존성을 사용하기 시작하면 .classpathmaven 빌드 mvn package가 급격히 올라갑니다.pom.xml
Paul Verest

예, 맞습니다. 패키지에는 로컬 jar가 포함되지 않습니다. 그러나 프로젝트에 질문을 추가하는 방법 (일식)에 대한 질문에 대답했습니다.
Anandkumar 19
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.