2012-11-26 1 views
1

익스트림 편집이 더 의미를 가지고 질문 :아이비 의존성 (파일의 디렉토리에 풀)

이의 내가 아니라 그냥 온라인에서 풀 수있는 하나보다 HttpClient를의 로컬 버전을 사용할 필요가 있다고 가정하자 repo (서명 사유로 인한). 나는이 그렇게처럼 처리하는 방법 ...

ivy.xml


<dependencies> 
    ...Other dependencies here 
    <dependency org="com.apache" name="httpclient" rev="4.2.2" conf="compile->default" ext="jar" /> 
</dependencies> 

ivysettings.xml


<settings defaultResolver="central"/> 

<resolvers> 
<url name="repo"> 
    <ivy pattern="http://myServer:8080/Repo/[organisation]/[artifact]/[revision]/ivy.xml" /> 
    <artifact pattern="http://myServer:8080/Repo/[organisation]/[artifact]/[revision]/[artifact].[ext]"/> 
</url> 

<url name="httpclient"> 
    <artifact pattern="http://myServer:8080/Repo/com.apache/httpclient/4.2.2/[artifact].[ext]"/> 
</url> 



<modules> 
    <module organisation="com.apache" resolver="repo" /> 
    <module organisation="com.httpclient" resolver="httpclient" /> 
</modules> 

이제는 내가 바라는 바는 myServer를 찾고있는 com.apache 해결자가 8080/Repo/com.apache/httpclient/4.2.2/ivy.xml이다. (이 myServer에 : 8080/REPO/... 디렉토리)

ivy.xml : 그리고 읽기, 여기에 파일의 내용이다


<dependency org="com.httpclient" name="commons-codec" rev="1.6" /> 
    <dependency org="com.httpclient" name="commons-logging" rev="1.1.1" /> 
    <dependency org="com.httpclient" name="fluent-hc" rev="4.2.2" /> 
    <dependency org="com.httpclient" name="httpclient" rev="4.2.2" /> 
    <dependency org="com.httpclient" name="httpclient-cache" rev="4.2.2" /> 
    <dependency org="com.httpclient" name="httpcore" rev="4.2.2" /> 
    <dependency org="com.httpclient" name="httpmime" rev="4.2.2"/> 

REAS 첫 번째 파일에 마크 업을 포함하는 것보다 두 번째 XML 파일을 읽으려는 의도는 자주 포함되는 LOC에 얼마나 많은 LOC가 추가 될지를 고려할 때 매우 분명합니다. 또한 미래의 모든 것을 쉽게 포함시킵니다.

오른쪽 지금은지고있어 오류는 다음과 같습니다 일부 프로젝트가 실패

는 com.myCompany # myProgramt의 의존성을 해결하는 것은 불가능 를 해결하기 위해, CompName 해결되지 않은 의존성 @ 작업 : com.apache #httpclient; 4.2.2 : 찾을 수 없음


감사합니다.

답변

1

아이비가 같은 해결에 주어진 유물의 모든 종속성을 찾을 것으로 기대하고있다. 따라서 repo 분석에서 com.apache에 대한 이슈를 찾고 거기에서 com.httpclient을 찾을 것으로 예상됩니다.

Ivy도 같은 확인 자 선언 내에서 <ivy pattern.../><artifact pattern.../> 문을 차례로 굴립니다.

<url name="amalgamation"> 
    <ivy pattern="http://myServer:8080/Repo/[organisation]/[artifact]/[revision]/ivy.xml" /> 
    <artifact pattern="http://myServer:8080/Repo/[organisation]/[artifact]/[revision]/[artifact].[ext]"/> 
    <artifact pattern="http://myServer:8080/Repo/com.apache/httpclient/4.2.2/[artifact].[ext]"/> 
</url> 
+0

그래서 아이비 패턴이 발견되었다고 가정 해 보겠습니다. 위의 마지막 코드 블록은이를 해결할 수 있습니까? 그런 식으로 내가 포함시킬 필요가있는 모든 폴더에 대해 하나의 아이비 파일을 만들 수 있습니다. 그런 다음 그 ivy.xml 파일을 가리킬 수 있습니다. –

+0

오른쪽 ... 로컬 파일 시스템의 위치를 ​​가리키는 이슈 패턴을 가질 수 있습니다. 'file : /// some/folder/of/jars'와 같은 URL을 정의하거나 파일 시스템 분석기를 사용하고 싶을 것입니다. 대부분의 프로젝트에는 프로젝트 빌드에 가장 일반적으로 필요한 "jar"의 로컬 폴더가 있거나 "와일드"에서 사용할 수 없습니다. 그런 다음 ibiblio 또는 다른 원격 저장소에서 다른 모든 것을 해결하십시오. [resolver chain] (http://ant.apache.org/ivy/history/latest-milestone/resolver/chain.html) – David

+0

David에서 관리하는 것이 가장 쉽습니다. 모든 파일은 http : // myServer에 있습니다. : 8080/Repo/com.apache/httpclient/4.2.2/[artifact]. [ext], 두 번째 아이비 파일에 무엇을 넣을 지 모르겠습니다. 두 번째 ivysettings 파일이 필요합니까? –

1

당신이 빌드는 다음과 같은 해결

<ibiblio name="central" m2compatible="true"/> 

당신은 Maven Central

당신의 목표는 여기에 무엇입니까로부터 dependencis를 다운로드 아이비 말하고있다을 사용하도록 구성? Maven Central과 같이 기능적으로 작동하는 로컬 담쟁이 저장소를 만들려면 어떻게해야합니까? 이 경우 가장 간단한 해결책은 Nexus, Artifactory 또는 Archiva과 같은 Maven 저장소 관리자를 설정하는 것입니다. Maven 저장소 관리자는 Central Maven 저장소에 저장된 스마트 캐시 및 "프록시"병처럼 행동 할 수 있습니다.

로컬 메이븐 저장소를 사용하도록 빌드를 구성하는 것은 간단하다

<ibiblio name="central" m2compatible="true" root="http://hostname:portnum/MavenRepo/> 
+0

jnlp 파일에 대한 서명 제한으로 인해 불행히도이 방법을 사용할 수 없습니다. 중앙에서 가져 오는 항아리는 아파치에 의해 서명되고 편집 할 때 서명 할 수없는 것 같습니다. 따라서 배포 할 때 그들을 개인 레포에 추가하고 서명을 취소했습니다. 이상하고 나는 그것을 싫어 ... 당신이 실제로 내가 대답하고 싶다고 생각했던 사람입니다. –

+0

내 목표는 ivy.xml 파일을 com.apache와 같은 문제를 해결하도록 설정 한 다음 com.apache에 사용자 정의 리졸버가 있도록하는 것입니다. 해당 리졸버는 내 repo에서 httpclient의 모든 내용을 설명하는 또 다른 ivy.xml 파일이있는 영역을 가리 킵니다. 따라서 본질적으로 : ivy.xml> ivysettings.xml> url resolver> 아이비 패턴 = "my2ndIvy.xml"은 httpclient ....의 모든 의존성을 포함하고 있습니다. –

+0

전체 질문을 썼습니다. –

0

당신이 당신의 원격 JAR 저장소에 어떤 서버를 사용하는 : 당신은 당신이 원하는 순서대로 모두 저장소 안타 하나의 해결을 만들기 위해 당신의 이점에 이것을 사용할 수 있습니까?

Nexus와 Artifactory 모두 원격 저장소에서 항목을 가져 오기 전에 자체적으로 저장된 Jar를 가져 오도록 설정할 수 있습니다. 이런 식으로, 당신은 ivysettings.xml을 찌를 필요가 없습니다. 대신 단순히 Artifactory/Nexus에서 기본 버전의 jar를 다운로드하면됩니다. 둘 다 무료이며 오픈 소스이며 다운로드입니다. Artifactory/Nexus로 아이비 설정을 바꾸는 것보다 원하는 것을 쉽게 할 수 있습니다.

그건 그렇고, 나는 Github에 Ivy project을보고 싶을 것입니다. 이 프로젝트를 Ant 프로젝트에 첨부하기 만하면 모든 프로젝트가 Ivy 용으로 자동 구성됩니다. 이렇게하면 전체 사이트에서 모든 프로젝트에 Ivy를 사용할 수 있으며 모든 것이 중앙에서 제어됩니다.