programing

Maven: 커스텀 외부 JAR을 프로젝트에 연결하기 위한 최선의 방법?

randomtip 2022. 7. 21. 22:04
반응형

Maven: 커스텀 외부 JAR을 프로젝트에 연결하기 위한 최선의 방법?

메이븐을 처음 배운 며칠인데 아직도 기초에 어려움을 겪고 있어요.프로젝트에서 참조할 필요가 있는 외부 .jar 파일(공용 저장소에서는 사용할 수 없음)이 있으며, 최선의 옵션을 찾고 있습니다.

라이브러리의 중앙 저장소가 없는 소규모 프로젝트이기 때문에 로컬 저장소 중 하나여야 합니다(소스 제어에 추가되어도 그렇게 동작해야 하는지 알 수 없음).또는 .jar를 정식 저장소 외부에 있는 디스크에 저장해야 합니다.

1) 프로젝트와 라이브러리를 모두 소스 컨트롤로 하고 싶은 상황에서 maven을 사용하여 .jar 파일을 프로젝트 참조에 추가하려면 어떻게 해야 할까요?

2) 아직도 이클립스가 그 의존성을 알아채지 못하는 것 같아요.pom 섹션에 수동으로 추가했더니 m2eclipse의 Dependencies 목록에 정상적으로 표시됩니다.mvn 컴파일과 mvn 패키지는 모두 성공하지만 프로그램을 실행하면 다음과 같은 결과가 나타납니다.

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을 이미 편집했다고 생각했을 경우에도 실행해야 합니까?

감사합니다!

Repository를 할 수 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

에 당신은 내생엔 i i i i i i i i i i i i i i i i i i i i i i i i i i 。mvn install:install-file로컬 저장소를 라이브러리 항아리로 채우려면 범위를 시스템에서 컴파일로 변경해야 합니다.

maven으로 시작하는 경우 IDE 플러그인이 아닌 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

업데이트는 자체 Nexus 서버를 설치한 지 얼마 되지 않아 훨씬 쉽고 깔끔하게 진행되었습니다.

저희 회사에는 흔하지만 어떤 메이븐 저장소에도 호스팅되지 않은 몇 개의 항아리가 있었습니다.또한 로컬 스토리지에도 보관하고 싶지 않았습니다.Github에 매우 간단한 mvn(퍼블릭) repo를 작성했습니다(단, 임의의 서버 또는 로컬에서 호스트 할 수 있습니다).
되는 jar 몇 하는 데 입니다.

  1. Git Hub oo repo 생 :
    https://github.com/<user_name>/mvn-repo/

  2. pom.xml에 추가
    name과는 ). (repo name은 name과 다릅니다.)

    <repository>
        <id>project-common</id>
        <name>Project Common</name>
        <url>https://github.com/<user_name>/mvn-repo/raw/master/</url>
    </repository>
    
  3. Github (Github)
    a. 파일이 @glich에서 언급한 패턴으로 저장된다는 것만 알면 됩니다.
    /groupId/artifactId/version/artifactId-version.jar
    b. 호스트에서 이 패턴에 맞는 폴더를 만듭니다.
    를 들어, ,, 음음음음라는 service-sdk-0.0.1.jarservice-sdk/service-sdk/0.0.1/ file " " " " " 를 참조해 .service-sdk-0.0.1.jar그 안에.
    c. 브라우저에서 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 파일 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 를 참조할 수 있습니다.

메이븐 프로젝트에 메이븐이 아닌 항아리를 추가하는 메이븐 방법

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

빌드 섹션에 메이븐 설치 플러그인 추가

<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>

참고: 블로그의 소유자입니다.

동일한 문제가 발생하여 스프링 부트 v1.4+를 사용하는 경우 이 방법으로 실행할 수 있습니다.

includeSystemScope를 사용하여 시스템스코프의 의존관계를 jar에 추가할 수 있습니다.

예.

프로젝트에 오라클 드라이버를 사용하고 있습니다.

<dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc14</artifactId>
        <version>10.2.0.3.0</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/src/main/resources/extra-jars/ojdbc14-10.2.0.3.0.jar</systemPath>
    </dependency>

그런 다음 includeSystemScope=true로 만들어 경로 /BOOT-INF/lib/**에 jar를 포함합니다.

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <includeSystemScope>true</includeSystemScope>
    </configuration>
</plugin>

중복을 방지하기 위해 리소스에서 제외합니다. 항아리는 뚱뚱합니다.

<build>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>**/*.jar</exclude>
            </excludes>
        </resource>
    </resources>
</build>

행운을 빕니다.

systemPath를 변경합니다.

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

pom.xml은 아티팩트와 일치하는 종속성을 찾기 위해 로컬 저장소를 확인합니다.또한 시스템 범위 또는 systemPath 속성을 실제로 사용할 필요가 없습니다.이러한 속성은 보통 JRE가 아닌 JDK에 있는 것을 위해 예약되어 있습니다.

maven 아티팩트를 설치하는 방법은 이 질문을 참조하십시오.

에서 사용하는 모든 예에서는

<repository>...</respository> 

외부를 필요로 하다

<repositories>...</repositories> 

태그를 동봉합니다.몇 가지 예에서는 명확하지 않다.

여기서 가장 좋은 솔루션은 Nexus 또는 Architectory 저장소를 설치하는 것입니다.이런 걸 놓을 수 있는 공간이 생겼을 뿐만 아니라 외부에서 캐슁을 함으로써 작업 속도를 높일 수 있습니다.

취급하고 있는 것이 오픈 소스인 경우는, central 에의 삽입도 검토해 주세요.

가이드를 참조해 주세요.

Eclipse 산소로 다음과 같은 작업을 수행할 수 있습니다.

  1. WEB-INF/lib에 라이브러리 배치
  2. 프로젝트 -> 빌드 경로 구성 -> 라이브러리 추가 -> 웹 애플리케이션 라이브러리

Maven은 프로젝트를 설치할 때 그것들을 가져갈 것입니다.

외부 항아리가 Maven 프로젝트에 의해서만 생성된 경우 시스템에서 전체 프로젝트를 복사하고

mvn install

프로젝트 디렉토리에 있습니다.그러면 로컬 maven 저장소인 .m2 디렉토리에 jar가 추가됩니다.

이것으로, 다음의 항목을 추가할 수 있습니다.

<dependency>
     <groupId>copy-from-the=maven-pom-of-existing-project</groupId>
     <artifactId>copy-from-the=maven-pom-of-existing-project</artifactId>
     <version>copy-from-the=maven-pom-of-existing-project</version>
</dependency>

이렇게 하면

mvn exec:java 

동작합니다.여기서 추천하는 것을 사용하면

<scope>system</scope>

그런 다음 명령줄을 통해 실행을 사용하는 동안 클래스를 개별적으로 추가해야 합니다.

여기서 설명하는 다음 명령을 사용하여 외부 jar를 추가할 수 있습니다.

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

이 문제에 대처하는 가장 효율적이고 깨끗한 방법은 Github 패키지를 사용하는 것입니다.

  1. 외부 jar를 공개 호스트할지 여부에 관계없이 필요에 따라 GitHub에 간단한 빈 공개/비공개 저장소를 만듭니다.

  2. 위에서 작성한 github 저장소에 외부 jar를 배포하려면 maven 명령어 아래를 실행합니다.

    mvn deploy:deploy-file \ -DgroupId= your-group-id \ -DartifactId= your-artifact-id \ -Dversion= 1.0.0 -Dpackaging= jar -Dfile= path-to-file \ -DrepositoryId= id-to-map-on-server-section-of-settings.xml \ -Durl=https://maven.pkg.github.com/github-username/github-reponame-created-in-above-step

    위의 명령어는 에 기재되어 있는 GitHub 저장소에 외부 jar를 전개합니다.-Durl=의존관계 전개 방법에서 GitHub 패키지 GitHub 패키지 전개 튜토리얼로 이 링크를 참조할 수 있습니다.

  3. .groupId ,artifactId ★★★★★★★★★★★★★★★★★」version한 바와 같이pom.xmlmvn install

  4. Maven은 GitHub Packages 레지스트리에서 외부 jar의 의존성을 가져와 당신의 maven 프로젝트에 제공합니다.

  5. 의 maven, maven의 maven을 설정해야 .settings.xml깃허브

언급URL : https://stackoverflow.com/questions/5692256/maven-best-way-of-linking-custom-external-jar-to-my-project

반응형