[java] Maven : 사용자 정의 외부 JAR을 내 프로젝트에 연결하는 가장 좋은 방법은 무엇입니까?

Maven을 배우는 것은 처음 며칠이며 여전히 기본 사항으로 어려움을 겪고 있습니다. 내 프로젝트에서 참조 해야하는 외부 .jar 파일 (공개 저장소에서 사용할 수 없음)이 있으며 최선의 옵션이 무엇인지 파악하려고합니다.

라이브러리의 중앙 리포지토리가없는 소규모 프로젝트이므로 로컬 리포지토리 (어떻게 소스 제어에 추가되는지, 어떻게 작동 해야하는지 알지 못합니까) 또는 .jar을 저장해야합니다. 공식 저장소 외부의 디스크.

1) 프로젝트와 라이브러리가 모두 소스 제어에 있기를 원한다면 maven을 사용하여 .jar 파일을 프로젝트 참조에 추가하는 가장 좋은 방법은 무엇입니까?

2) 여전히 Eclipse가 종속성을 볼 수없는 것 같습니다. 나는 그것을 pom의 섹션에 수동으로 추가했으며 m2eclipse의 Dependencies 목록에 잘 나타납니다. mvn compile 및 mvn package 모두 성공하지만 프로그램을 실행하면 다음과 같은 결과가 발생합니다.

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
        LibraryStuff cannot be resolved to a type

이것은 POM을 다음과 같이 편집 한 후입니다.

<dependency>
  <groupId>stuff</groupId>
  <artifactId>library</artifactId>
  <version>1.0</version>
  <systemPath>${lib.location}/MyLibrary.jar</systemPath>
  <scope>system</scope>
</dependency>

mvn install : install-file을 실행해야합니까? 위와 같이 이미 pom.xml을 편집했다고 생각 했습니까?

감사!



답변

mvn install:install-file로컬 저장소를 라이브러리 jar로 채우려면 시스템에서 컴파일로 범위를 변경 해야한다고 생각합니다 .

maven으로 시작하는 경우 복잡성을 추가하기 때문에 IDE 플러그인이 아닌 maven을 직접 사용하는 것이 좋습니다.

오류에 관해서는 필요한 항아리를 클래스 경로에 넣습니까? 라이브러리에서 유형을 사용하는 경우 런타임에서도 해당 유형에 액세스해야합니다. 이것은 maven 자체와 관련이 없습니다.

라이브러리를 소스 제어에 배치하려는 이유를 이해하지 못합니다. 바이너리 항아리가 아닌 소스 코드 용입니다.


답변

In Project Repository를 만들 수 있으므로 run mvn install:install-file새 컴퓨터에서 작업 할 때마다 필요하지 않습니다

<repository>
    <id>in-project</id>
    <name>In Project Repo</name>
    <url>file://${project.basedir}/libs</url>
</repository>

<dependency>
    <groupId>dropbox</groupId>
    <artifactId>dropbox-sdk</artifactId>
    <version>1.3.1</version>
</dependency>

/groupId/artifactId/version/artifactId-verion.jar

세부 사항이 블로그 포스트를 읽으십시오

https://web.archive.org/web/20121026021311/charlie.cu.cc/2012/06/how-add-external-libraries-maven


답변

<dependency> 요소 안에 중첩 된 <scope> 요소를 사용하면 쉽게 달성 할 수 있습니다.

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

 <dependencies>
   <dependency>
     <groupId>ldapjdk</groupId>
     <artifactId>ldapjdk</artifactId>
     <scope>system</scope>
     <version>1.0</version>
     <systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
   </dependency>
 </dependencies>

참조 : http://www.tutorialspoint.com/maven/maven_external_dependencies.htm


답변

Maven 매뉴얼 은 다음과 같이 말합니다 .

mvn install:install-file -Dfile=non-maven-proj.jar -DgroupId=some.group -DartifactId=non-maven-proj -Dversion=1 -Dpackaging=jar


답변

업데이트 이후 Google은 자체 Nexus 서버를 훨씬 쉽고 깔끔하게 설치했습니다.

우리 회사에는 항아리가 있었지만 공통적이지 만 어떤 maven 저장소에 호스팅되지 않았으며 로컬 저장소에 보관하지 않으려는 항아리도있었습니다. 우리는 Github에서에 매우 간단한 MVN (공공)의 repo를 만들어 (하지만 당신은 로컬 서버 나에 호스팅 할 수 있습니다) :
참고 이 몇 거의 chaning하지 jar 파일을 관리하기위한 유일한 이상적인지를

  1. GitHub에서 저장소를 만듭니다.
    https://github.com/<user_name>/mvn-repo/

  2. pom.xml에 리포지토리 추가
    (전체 경로 원시 파일은 리포지토리 이름과 약간 다름)

    <repository>
        <id>project-common</id>
        <name>Project Common</name>
        <url>https://github.com/<user_name>/mvn-repo/raw/master/</url>
    </repository>
  3. 호스트 (Github 또는 개인 서버)에
    대한 종속성 추가 여러분이 알아야 할 것은 파일이 @glitch
    /groupId/artifactId/version/artifactId-version.jar
    b에 언급 된 패턴으로 저장되어 있다는 것입니다 . 호스트에서이 패턴과 일치하는 폴더를 만듭니다.
    service-sdk-0.0.1.jar, 이름의 jar 파일이있는 경우 폴더를 작성 service-sdk/service-sdk/0.0.1/하고 jar 파일 service-sdk-0.0.1.jar을 폴더 에 넣으 십시오.
    씨. 브라우저에서 jar 파일을 다운로드하여 테스트하십시오 (이 경우 :https://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar

  4. pom.xml 파일에 대한 종속성을 추가하십시오 :

    <dependency>
        <groupId>service-sdk</groupId>
        <artifactId>service-sdk</artifactId>
        <version>0.0.1</version>
    </dependency>
  5. 즐겨


답변

systemPath를 사용하지 마십시오. 사람들이 여기에서 말한 것과 달리 체크 아웃 된 프로젝트 디렉토리 아래의 폴더에 외부 병을 넣고 Maven이 다른 종속성처럼 찾도록 할 수 있습니다. 다음은 두 가지 중요한 단계입니다.

  1. -DlocalRepositoryPath와 함께 “mvn install : install-file”을 사용하십시오.
  2. POM에서 해당 경로를 가리 키도록 저장소를 구성하십시오.

매우 간단하며 단계별 예제를 찾을 수 있습니다.
http://randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html


답변

Maven 프로젝트에 Maven 이외의 항아리를 추가하는 Maven 방법

메이븐 프로젝트 및 메이븐이 아닌 항아리

빌드 섹션에 maven 설치 플러그인 추가

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <version>${version.maven-install-plugin}</version>
        <executions>

            <execution>
                <id>install-external-non-maven1-jar</id>
                <phase>clean</phase>
                <configuration>
                    <repositoryLayout>default</repositoryLayout>
                    <groupId>jar1.group</groupId>
                    <artifactId>non-maven1</artifactId>
                    <version>${version.non-maven1}</version>
                    <file>${project.basedir}/libs/non-maven1.jar</file>
                    <packaging>jar</packaging>
                    <generatePom>true</generatePom>
                </configuration>
                <goals>
                    <goal>install-file</goal>
                </goals>
            </execution>
            <execution>
                <id>install-external-non-maven2-jar</id>
                <phase>clean</phase>
                <configuration>
                    <repositoryLayout>default</repositoryLayout>
                    <groupId>jar2.group</groupId>
                    <artifactId>non-maven2</artifactId>
                    <version>${version.non-maven2}</version>
                    <file>${project.basedir}/libs/non-maven2.jar</file>
                    <packaging>jar</packaging>
                    <generatePom>true</generatePom>
                </configuration>
                <goals>
                    <goal>install-file</goal>
                </goals>
            </execution>
            <execution>
                <id>install-external-non-maven3-jar</id>
                <phase>clean</phase>
                <configuration>
                    <repositoryLayout>default</repositoryLayout>
                    <groupId>jar3.group</groupId>
                    <artifactId>non-maven3</artifactId>
                    <version>${version.non-maven3}</version>
                    <file>${project.basedir}/libs/non-maven3.jar</file>
                    <packaging>jar</packaging>
                    <generatePom>true</generatePom>
                </configuration>
                <goals>
                    <goal>install-file</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

의존성 추가

<dependencies>
    <dependency>
        <groupId>jar1.group</groupId>
        <artifactId>non-maven1</artifactId>
        <version>${version.non-maven1}</version>
    </dependency>
    <dependency>
        <groupId>jar2.group</groupId>
        <artifactId>non-maven2</artifactId>
        <version>${version.non-maven2}</version>
    </dependency>
    <dependency>
        <groupId>jar3.group</groupId>
        <artifactId>non-maven3</artifactId>
        <version>${version.non-maven3}</version>
    </dependency>
</dependencies>

참고 사항 블로그의 소유자입니다