احصل على اللبلاب: استرداد لعدم نسخ جرة إلى تكوينين؟
-
28-09-2019 - |
سؤال
أحاول إعداد بناء النمل الخاص بي بحيث يتم فصل الأهداف التي تدير وظائف اللبلاب تمامًا عن تلك التي يديرها البناء المستمر ومعظم المطورين. أريد هدفًا واحدًا لتنزيل التبعيات المحدثة ، والتي سأقوم بتسجيل الوصول إليها. ستؤدي أهداف أخرى إلى إعداد 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 مرة واحدة فقط.