احصل على اللبلاب: استرداد لعدم نسخ جرة إلى تكوينين؟

StackOverflow https://stackoverflow.com/questions/3087687

سؤال

أحاول إعداد بناء النمل الخاص بي بحيث يتم فصل الأهداف التي تدير وظائف اللبلاب تمامًا عن تلك التي يديرها البناء المستمر ومعظم المطورين. أريد هدفًا واحدًا لتنزيل التبعيات المحدثة ، والتي سأقوم بتسجيل الوصول إليها. ستؤدي أهداف أخرى إلى إعداد ClassPath من خلال تضمين *.jar من الدليل ذي الصلة.

لدي تكوينان:

<configurations>
    <conf name="compile" />
    <conf name="test" />
</configurations>

لدي بعض التبعيات:

<dependency
    org="my.org"
    name="some-lib"
    rev="latest.release"
    conf="compile->default" />
<dependency
    org="my.org"
    name="some-test-lib"
    rev="latest.release"
    conf="test->default" />

وأنا أقوم بتنزيل تلك التبعيات وتبعياتها المتعدية باستخدام اللبلاب: استرداد:

<ivy:retrieve
    pattern="lib/[conf]/[type]/[artifact]-[revision].[ext]"
    sync="true"
    file="ivy.xml" />

المشكلة هي أنني أرى بعض الجرار التكرارات بين دليل التجميع وأدلة الاختبار ، والتي تأتي من تبعيات متعدية. بما أنني أرغب في التحقق من كل هذه الجرار واستخدامها لإنشاء ClassPaths ، أود تجنب التكرارات. هل هذا ممكن؟

lib/compile/jar/some-lib-1.0.jar
lib/compile/jar/SLF4J-API-1.5.11.JAR
lib/test/jar/shest-test-lib-1.0.jar
lib/test/jar/junit-4.7.jar
lib/test/jar/SLF4J-API-1.5.11.JAR

هل كانت مفيدة؟

المحلول 2

إذا كان بإمكاني القيام بذلك من خلال اللبلاب مباشرة ، فسيكون ذلك أفضل. في الوقت الحالي ، قمت بحل المشكلة حذف التكرارات باستخدام النمل.

نصائح أخرى

هذا ليس ازدواجية ، كل تكوين هو مجموعة منفصلة من الجرار وبلاب تقييد المهمة تخلق كل مجموعة ....

ربما يكون من المنطقي إنشاء classpaths مباشرة ، بدلاً من ملء محلي ليب الدليل.

إليك مقتطف من ملفات بناء النمل الخاصة بي:

<target name="get-dependencies">
    <ivy:resolve/>

    <ivy:cachepath pathid="compile.path" conf="compile" />
    <ivy:cachepath pathid="test.path" conf="test" />
</target>

<target name="compile" depends="get-dependencies">
    <javac srcdir="src" destdir="build/classes" classpathref="compile.path"/>
</target>

عادةً ما أستخدم اللبلاب فقط يسترد المهمة عندما أحتاج إلى إنشاء نسخة محلية من مجموعة من الجرار ، على سبيل المثال تجميع دليل تطبيق الويب:

<ivy:retrieve pattern="build/WEB_INF/lib/[artifact].[ext]" conf="runtime"/>

تحديث

بديل آخر هو توجيه اللبلاب لاستبعاد وحدة SLF4J عند تنزيل التبعيات العابرة ، على النحو التالي:

<dependency org="my.org" name="some-lib" rev="latest.release" conf="compile->default">
    <exclude module="slf4j-api"/> 
</dependency>

<dependency org="my.org" name="some-test-lib" rev="latest.release" conf="test->default">
    <exclude module="slf4j-api"/> 
</dependency>

حاول القيام بما يلي. يجب أن يمتد الاختبار الخاص بك

<dependency
org="my.org"
name="some-test-lib"
rev="latest.release"
conf="**test->compile**" />

إذا كنت على حق Ivy ، فيجب أن تجد هذا الاختبار تمديد الترجم وسيقوم بتنزيل SLF4J مرة واحدة فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top