Maven: 상대 경로로 항아리에 종속성을 추가합니다.
나는 내 pom에 종속물로 추가하고 싶은 독점적인 항아리가 있다.
그러나 저장소에 추가하고 싶지 않습니다.는 제가 에 쓰던 , 를 들어 maven maven 를 원하기 입니다.mvn compile
(개발자가 직접 어떤 저장소에 추가하도록 요구하지 않음) 등입니다.
소스 컨트롤의 서드파티 lib에 jar를 배치하여 pom.xml 파일에서 상대 경로로 링크합니다.
이게 가능해? 어떻게?
소스 컨트롤의 서드파티 lib에 jar를 배치하여 pom.xml 파일에서 상대 경로로 링크합니다.
이것을 정말로 원한다면(기업 저장소를 사용할 수 없는 경우) 프로젝트에 로컬인 파일 저장소를 사용하고 이 파일을 사용하지 않는 것이 좋습니다.system
★★★★★★★★★★★★★★★★★★★★★★★.system
이러한 의존성은 많은 상황(어셈블리 등)에서 잘 작동하지 않기 때문에 범위 지정은 피해야 합니다.이러한 의존성은 이점보다 문제를 더 많이 일으킵니다.
대신 프로젝트의 로컬 저장소를 선언합니다.
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://${project.basedir}/my-repo</url>
</repository>
</repositories>
를 설치합니다.install:install-file
다음 파라미터로 설정합니다.
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
업데이트: 다음과 같습니다.install:install-file
localRepositoryPath
2.2로 하겠습니다.단, 플러그인의 버전 2.3 이후에서는 동작합니다.따라서 플러그인의 완전 수식 이름을 사용하여 버전을 지정합니다.
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file \
-Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
maven-install-install-install 매뉴얼
합니다.system
★★★★★
<dependency>
<groupId>your.group.id</groupId>
<artifactId>3rdparty</artifactId>
<version>X.Y.Z</version>
</dependency>
은 IMHO를 보다 IMHO를 하는 것이 더 .system
당신의 의존관계가 선량한 시민처럼 취급될 수 있는 범위(예를 들어, 그것은 어셈블리에 포함될 것 등)
여기서 언급해야 할 것은 기업 환경에서 이 상황에 대처하는 "올바른 방법"은 기업 저장소를 사용하는 것입니다.
「 」의 system
★★★★★★★★★★★★★」${basedir}
directory 입니다.
<dependency>
<artifactId>..</artifactId>
<groupId>..</groupId>
<scope>system</scope>
<systemPath>${basedir}/lib/dependency.jar</systemPath>
</dependency>
단, 저장소에 jar를 설치하고 SCM에 커밋하지 않는 것이 좋습니다.이것은 결국 maven이 배제하려고 하는 것입니다.
이것은 이전 답변인 "Can I add jars to maven 2 build classpath?"에 추가된 또 다른 방법입니다.
이는 멀티 모듈빌드를 사용하는 경우, 특히 다운로드된 JAR이 부모 이외의 하위 프로젝트에서 참조되는 경우 제한 범위를 벗어납니다.또한 빌드의 일부로 POM 및 SHA1 파일을 생성함으로써 셋업 작업을 줄일 수 있습니다.또한 이름을 수정하거나 메이븐 저장소 구조를 따르지 않고도 프로젝트 내 어디에든 파일을 저장할 수 있습니다.
이것은 maven-install-plugin을 사용합니다.이 작업을 수행하려면 다중 모듈 프로젝트를 설정하고 빌드를 나타내는 새 프로젝트가 로컬 저장소에 파일을 설치하고 먼저 파일을 설치해야 합니다.
multi-module project pom.xml은 다음과 같습니다.
<packaging>pom</packaging>
<modules>
<!-- The repository module must be first in order to ensure
that the local repository is populated -->
<module>repository</module>
<module>... other modules ...</module>
</modules>
그러면 Repository/pom.xml 파일에는 프로젝트의 일부인 JAR을 로드하기 위한 정의가 포함됩니다.다음은 pom.xml 파일의 일부입니다.
<artifactId>repository</artifactId>
<packaging>pom</packaging>
pom 패키징에서는 테스트나 jar 파일 컴파일 또는 생성을 할 수 없습니다.pom.xml의 고기는 maven-install-plugin이 사용되는 빌드 섹션에 있습니다.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>com.ibm.db2:db2jcc</id>
<phase>verify</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<groupId>com.ibm.db2</groupId>
<artifactId>db2jcc</artifactId>
<version>9.0.0</version>
<packaging>jar</packaging>
<file>${basedir}/src/jars/db2jcc.jar</file>
<createChecksum>true</createChecksum>
<generatePom>true</generatePom>
</configuration>
</execution>
<execution>...</execution>
</executions>
</plugin>
</plugins>
</build>
둘 이상의 파일을 설치하려면 실행을 추가합니다.
이것은 나에게 효과가 있다: 예를 들어, 내가 이 의존성을 가지고 있다고 합시다.
<dependency>
<groupId>com.company.app</groupId>
<artifactId>my-library</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/my-library.jar</systemPath>
</dependency>
그런 다음 다음과 같이 시스템 종속성에 대한 클래스 경로를 수동으로 추가합니다.
<Class-Path>libs/my-library-1.0.jar</Class-Path>
전체 구성:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifestEntries>
<Build-Jdk>${jdk.version}</Build-Jdk>
<Implementation-Title>${project.name}</Implementation-Title>
<Implementation-Version>${project.version}</Implementation-Version>
<Specification-Title>${project.name} Library</Specification-Title>
<Specification-Version>${project.version}</Specification-Version>
<Class-Path>libs/my-library-1.0.jar</Class-Path>
</manifestEntries>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.company.app.MainClass</mainClass>
<classpathPrefix>libs/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/libs/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
나는 이것을 하기 위한 패턴에 대해 이전에 쓴 적이 있다.
이는 Pascal이 제안한 솔루션과 매우 유사하지만, 이러한 모든 종속성을 전용 저장소 모듈로 이동하므로 다중 모듈 빌드의 경우 종속성을 사용하는 모든 곳에서 반복할 필요가 없습니다.
기본적으로 pom.xml에 추가합니다.
...
<repositories>
<repository>
<id>lib_id</id>
<url>file://${project.basedir}/lib</url>
</repository>
</repositories>
...
<dependencies>
...
<dependency>
<groupId>com.mylibrary</groupId>
<artifactId>mylibraryname</artifactId>
<version>1.0.0</version>
</dependency>
...
</dependencies>
gradle로 전환했고 gradle에서 훨씬 더 잘 작동합니다.그런 일시적 상황에 대비하여 병을 놓을 수 있는 폴더를 지정하기만 하면 됩니다.일반적인 의존관계 관리 섹션에는 아직 대부분의 항이 정의되어 있습니다(즉,maven과 같다).이것은 우리가 정의하는 또 하나의 의존관계일 뿐이다.
따라서 기본적으로 maven 저장소가 아닌 경우 lib dir에 원하는 jar를 드롭하여 임시 테스트를 수행할 수 있습니다.
Pascal이 게시한 솔루션에 대한 작은 추가 사항
이 경로를 따라갔을 때 ojdbc jar 설치 중 maven에서 오류가 발생했습니다.
[INFO] --- maven-install-plugin:2.5.1:install-file (default-cli) @ validator ---
[INFO] pom.xml not found in ojdbc14.jar
-DpomFile을 추가한 후 문제가 해결되었습니다.
$ mvn install:install-file -Dfile=./lib/ojdbc14.jar -DgroupId=ojdbc \
-DartifactId=ojdbc -Dversion=14 -Dpackaging=jar -DlocalRepositoryPath=./repo \
-DpomFile=~/.m2/repository/ojdbc/ojdbc/14/ojdbc-14.pom
이클립스를 사용하여 실행 가능한 Jar: 내보내기/실행 가능한 Jar 파일을 생성할 수 있습니다.
언급URL : https://stackoverflow.com/questions/2229757/maven-add-a-dependency-to-a-jar-by-relative-path
'IT이야기' 카테고리의 다른 글
IntelliJ IDEA가 인터페이스에서 Java 구현 클래스로의 도약 (0) | 2022.05.27 |
---|---|
__DA 사용방법TE__와 __TIME__의 매크로가 2개의 정수로 정의되어 있습니다.그러면 스트링화? (0) | 2022.05.27 |
Vue.js는 항상 마지막 항목을 어레이에서 삭제합니다. (0) | 2022.05.27 |
일반 반환 유형 상한 - 인터페이스 대 클래스 - 놀랍도록 유효한 코드 (0) | 2022.05.27 |
Vue + Vuetify에서 스낵바를 글로벌 구성 요소로 사용 (0) | 2022.05.27 |