문제

Maven Public Repository에 있지 않은 제 3 자 도서관을 사용하려면 다른 사람이 내 코드를 확인할 때 여전히 내 코드를 확인할 수 있도록 내 프로젝트의 종속성으로 포함시키는 가장 좋은 방법은 무엇입니까?

내 응용 프로그램 "a"는 공개 저장소에 존재하지 않는 JAR에 의존합니다. 그러나 나는 "B"를 "A"에 의존하는 것으로 추가하고 싶다.

도움이 되었습니까?

해결책

프로젝트를 직접 설치할 수 있습니다.

또는 사용할 수 있습니다 system 다음과 같은 범위 :

<dependency>
    <groupId>org.group.project</groupId>
    <artifactId>Project</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/project-1.0.0.jar</systemPath>
</dependency>

systemPath 프로젝트의 절대 경로가 필요합니다. 더 쉽게하기 위해 JAR 파일이 저장소/프로젝트 내에 있으면 사용할 수 있습니다. ${basedir} 프로젝트의 근본에 묶인 속성.

다른 팁

이 상황에있는 모듈이있는 상위 프로젝트가있는 경우 (저장소에 있지 않은 종속성이 필요함) 부모 프로젝트를 설정하여 Exec-Maven-Plugin 플러그인을 사용하여 종속 파일을 자동 설치할 수 있습니다. 예를 들어, 공개적으로 사용할 수 없으므로 authorize.net jar 파일 로이 작업을 수행해야했습니다.

학부모 POM :

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <inherited>false</inherited>
            <executions>
                <execution>
                    <id>install-anet</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>mvn</executable>
                <arguments>
                    <argument>install:install-file</argument>
                    <argument>-Dfile=service/lib/anet-java-sdk-1.4.6.jar</argument>
                    <argument>-DgroupId=net.authorize</argument>
                    <argument>-DartifactId=anet-java-sdk</argument>
                    <argument>-Dversion=1.4.6</argument>
                    <argument>-Dpackaging=jar</argument>
                </arguments>
            </configuration>
        </plugin>
    </plugins>
</build>

위의 예에서는 JAR의 위치가 "서비스"모듈의 Lib 폴더에 있습니다.

서비스 모듈이 유효성 검사 단계에 들어가면 JAR은 로컬 리포지토리에서 사용할 수 있습니다. 부모님 POM에서 GroupId, Artifact 등을 설정하는 방식으로 참조하십시오. 예를 들어:

<dependency>
    <groupId>net.authorize</groupId>
    <artifactId>anet-java-sdk</artifactId>
    <version>1.4.6</version>
</dependency>

시스템 범위를 사용하면 작동 할 수 있지만 Maven 사양에서도 권장되지 않습니다. 휴대용이 아닙니다.

Maven Book에서 :

시스템- 시스템 범위는 로컬 파일 시스템의 JAR에 대한 명시적인 경로를 제공해야한다는 점을 제외하고 제공되는 것과 유사합니다. 이는 시스템 라이브러리의 일부일 수있는 기본 객체에 대한 컴파일을 허용하기위한 것입니다. 아티팩트는 항상 사용할 수있는 것으로 가정되며 저장소에서 찾아 보는 것은 아닙니다. 스코프를 시스템으로 선언하면 SystemPath 요소도 제공해야합니다. 이 범위는 권장되지 않습니다 (공개 또는 사용자 정의 Maven 저장소에서 항상 종속성을 참조해야합니다).

가장 좋은 방법은 로컬 저장소 또는 엔터프라이즈 저장소에 설치하여 모든 동료가 액세스 할 수 있도록하는 것입니다.

Nexus와 같은 저장소 관리자를 사용하는 경우 매우 쉽습니다.

일반적으로 말하면 먼저 제 3 자 항아리를 현지 저장소에 넣어야합니다. 그런 다음 pom.xml에 종속성을 추가하여 사용할 수 있습니다.

예를 들어.

1. 먼저 항아리를 로컬 저장소에 넣습니다.

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

참고 :이 명령에는 Maven-Install-Plugin 버전 2.5 이상이 필요합니다. 그렇지 않은 경우 참조 할 수 있습니다 여기

2. 프로젝트의 pom.xml에 종속성을 추가하여 항아리를 사용하십시오.
프로젝트의 pom.xml에 이것을 추가하십시오.

<dependency>
  <groupId>${the groupId in the jar's pom.xml}</groupId>
  <artifactId>${the artifactId in the jar's pom.xml}</artifactId>
  <version>${the version in the jar's pom.xml}</version>
</dependency>

3. 그런 다음 실행하여 프로젝트를 패키지하거나 배포 할 수 있습니다. mvn package 또는 mvn deploy

제 3 자 용기도 패키지에 포함됩니다.

Groovy/Grail Tool Suite를 사용하는 경우 (GGTS) 그런 다음 아래 단계를 사용하여 타사 의존성을 직접 가져올 수 있습니다 (그러나 지역 저장소에 제 3 자 종속성이 있는지 확인).

  1. 프로젝트 탐색기로 이동하여 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오.
  2. 클릭 수입 옵션.
  3. 소비하십시오 Maven 옵션 및 선택 Maven 저장소에 아티팩트를 설치하거나 배포하십시오 다음을 클릭하십시오.
  4. 눈썹을 내고 사용하여 타사 종속성을 선택하십시오 아티팩트 파일옵션과 세부 사항을 입력하십시오 그룹 ID, 아티팩트 ID 및 버전사용 pom.xml 파일을 클릭하십시오 마치다

잠시 기다리면 그 문제에 대한 오류가 발생했을 것입니다.

이 솔루션은 저에게 효과적이었습니다. 1. 내 프로젝트의 루트 디렉토리에 로컬 Maven-Repo를 만들고 2에서 모든 항아리를 복사했습니다. 2. 내가 사용해야 할 모든 항아리에 필요한 POM 파일과 메타 데이터 등을 생성하기 위해 다음 명령을 실행했습니다.

mvn deploy:deploy-file -DgroupId=<somegroupid> -DartifactId=<someartifact> -Dversion=1.0.0 -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=<path to jar file>

이것은 로컬 Maven-Repo 내부에 POM 파일이있는 새 JAR 파일을 생성했으며 프로젝트에 이와 같은 종속성으로 포함시킬 수있었습니다.

    <dependency>
        <groupId>somegroupid</groupId>
        <artifactId>someartifact</artifactId>
        <version>1.0.0</version>
    </dependency>

그 다음에 mvn package 내 프로젝트 종속성이 전쟁 파일로 해결되고 포장되도록 보장했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top