여기 내가 시도한 몇 가지 솔루션,하지만 내 용도로 좋은하지 않았다 :
1. 받는다는 설치 - 플러그인
을 아이디어는 설치의 일부로 설치 파일을 목표를 추가하는 것입니다 POM을이를 추가하여 라이프 사이클 :
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>lib/my-custom-jar-1.0.0.jar</file>
</configuration>
</execution>
</executions>
</plugin>
[...]
<dependency>
<groupId>org.me</groupId>
<artifactId>my-custom-jar</artifactId>
<version>1.0.0</version>
</dependency>
그러나, 바로 그 첫 번째 목표, validate
에, Maven은 의존성 전에 해결하려고합니다 설치 파일이 실행됩니다.
깨끗한 목표를 사용하는 아이디어를 보았습니다. Annoyingly 이것은 별도의 명령 (mvn clean && mvn install
)을 수행 할 때 작동하지만 하나의 mvn 명령 (mvn clean install
)에서 둘 다 수행하면 Maven은 종속성을 먼저 해결합니다. 이것에 대한 해결책이있을 수 있을까요?
2. 멀티 모듈 프로젝트
아이디어, seen in this Stack Overflow answer, 당신은 당신의 부모 치어의 파일을 설치하고, 자녀의 치어의 종속성을 추가한다는 것입니다. Maven은 의존성을 개별적으로 만 해결할 것이므로 이것이 작동해야합니다.
그러나 내 프로젝트는 단일 모듈이며이 문제를 해결하기 위해 가짜 부모를 만드는 것은 지나친 복잡성과 추한 해킹처럼 보입니다. 이 이런 상황에 대해 정확히 만든 것처럼이 보이지만 기본 디렉토리와
3. 시스템의 범위는
<dependency>
<groupId>org.me</groupId>
<artifactId>my-custom-jar</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/my-custom-jar-1.0.0.jar</systemPath>
</dependency>
, 시스템 범위는 실제로 의존성이 프로젝트를 실행하겠습니다 모든 시스템에있을 것으로 예상 , 그래서 그것은 .war에 패키징되지 않아 내 프로젝트가 기능하지 않게됩니다.
4. addjars - 받는다는 - 플러그인
This custom plugin found here는 컴파일하는 동안 치어에 추가하여 .war 파일에서의 .jar을 포함한다.
<plugin>
<groupId>com.googlecode.addjars-maven-plugin</groupId>
<artifactId>addjars-maven-plugin</artifactId>
<version>1.0.5</version>
<executions>
<execution>
<goals>
<goal>add-jars</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>${basedir}/lib</directory>
<includes>
<include>**/my-custom-jar-1.0.0.jar</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
이것은 대부분의 일반적인 경우에 작동합니다. 그러나 실제 pom에서 사용자 정의 .jar에 대한 종속성을 표시하지 않으므로 IDE에 많은 클래스가 누락되므로 사용자 정의 .jar을 수동으로 외부 라이브러리로 추가해야합니다.
이것은 여전히 다소 해킹되어 일부 특수한 경우에는 작동하지 않습니다 (hpi : Jenkins 디버깅 용으로 실행하면 오류가 발생 함). 게다가 제 코드가 써드 파티 플러그인에 의존하지 않았 으면합니다.
5.
인 - 디렉토리 메이븐 저장소
이 게시물을 만든 후이 솔루션을 발견, 나는 그것을 꽤 행복 해요.
내 질문에 mvn install-file
명령을 수행하는 것과 거의 같은 결과입니다. 단, 결과를 저장하고 프로젝트 내에있는 리포지토리에 사용자 지정 라이브러리를 설치하여 프로젝트의 일부로 유지해야합니다.
이 명령을 사용하여 라이브러리를 사전 설치해야합니다.
mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file \
-Dfile=lib/cloudfoundry-client-lib-shaded-1.0.3.jar \
-DlocalRepositoryPath=lib
리포지토리가 lib 폴더에 만들어지면이 명령을 다시 수행 할 필요가 없습니다.
당신이 당신의 치어에이 저장소를 사용할 것을 나타냅니다 :
<repository>
<id>Local repository</id>
<url>file://${basedir}/lib</url>
</repository>
[...]
<dependency>
<groupId>org.me</groupId>
<artifactId>my-custom-jar</artifactId>
<version>1.0.0</version>
</dependency>
이 솔루션은 힘 당신이 당신의 SCM에 추가 폴더의 무리를 저지하기 위해,하지만 나를 위해 관리 단점이었고, 난 이것에 만족했다.
음영 처리 된 버전이 Maven-Shade-Plugin으로 생성되었거나 Maven 빌드로 빌드 되었습니까? – khmarbaise
모두 같네요. Maven-Shade-Plugin을 라이프 사이클의 일부로 포함하는 Maven 빌드에 의해 빌드됩니다. 이것이 내가 의존성 충돌로 겪었던 문제에 대한 해결책이었습니다. [내가 만든 이전 질문을 참조하십시오] (http://stackoverflow.com/questions/24066027/spring-core-dependency-version-error-with-a-jenkins-plugin) – Wiwiweb
[ 메이븐 2 클래스 패스를 설치하지 않고 빌드?] (http://stackoverflow.com/questions/364114/can-i-add-jars-to-maven-2-build-classpath-without-installing-them) – Stephan