2012-11-28 22 views
5

Ich habe ein Master-Ivy-Projekt, das andere in ihr Projekt über eine svn:externals-Eigenschaft aufnehmen. Das Projekt enthält das Ivy jar, die Standarddatei ivysettings.xml, die eine Verbindung zu unserem Projekt herstellt, und einige Ant-Makros, die es mir ermöglichen, die Art und Weise zu standardisieren, in der wir jars usw. erstellen. (Beispiel: <jar.macro> vs.) verwendet dieselben Parameter, bettet aber automatisch auch die pom.xml in das Jar ein und fügt Jenkins Build-Informationen in das Manifest ein.Ivy: <ivy: settings> vs. <ivy: configure>

Wir verwenden Jenkins auch als unser kontinuierliches Integrationssystem. Eines der Dinge, die ich tun möchte, ist, den Ivy-Cache für jeden Build zu säubern, so dass wir aufgrund von Cache-Problemen keine Jar-Probleme haben. Um dies zu tun, habe ich Setup meine ivysettings.xml Datei einen separaten Cache für jeden Jenkins Executor zu definieren:

<ivysettings> 
    <property name="env.EXECUTOR_NUMBER" value="0" override="false"/> 
    <caches 
     defaultCacheDir="${ivy.default.ivy.user.dir}/cache-${env.EXECUTOR_NUMBER}" 
     resolutionCacheDir="${ivy.dir}/../target/ivy.cache"/> 
    <settings defaultResolver="default"/> 
    <include file="${ivy.dir}/ivysettings-public.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-local.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/> 
</ivysettings> 

habe ich ursprünglich die <ivy:settings> Aufgabe unserer Projekte mit Ivy zu konfigurieren. Alle Jenkins-Executoren verwendeten jedoch denselben Ivy-Cache, der Probleme verursachte. Ich wechselte von <ivy:settings> zu <ivy:configure> und das Problem ging weg. Anscheinend, <ivy:configure> richtet Ivy sofort (und damit die Caches richtig eingerichtet), während <ivy:settings> nicht setzt Ivy bis <ivy:resolve> aufgerufen wird.

Ich habe einige E-Mails auf Nabble über <ivy:configure> veraltet gesehen (oder vielleicht nicht). Ich sehe nichts in der Online-Dokumentation von Ivy, die besagt, dass <ivy:configure> veraltet ist.

Also, wann würden Sie <ivy:settings> vs. <ivy:configure> verwenden. In meinem Fall, da ich separate Caches für jeden Jenkins-Executor benötigte, musste ich <ivy:configure> verwenden, aber gibt es einen Grund, warum ich <ivy:settings> über <ivy:configure> verwenden könnte? Und, ist <ivy:configure> veraltet?

+0

Ausgezeichnete Frage. Ich habe nie die "konfigurieren" Aufgabe verwendet. Ich vermute, dass die Einstellungsaufgabe nützlicher ist, weil es Ihnen ermöglichen würde, mehrere Efeu-Auflösungsaufgaben durchzuführen, wobei mehr als eine Efeu-Einstellungsdatei verwendet wird. Da ich eine Efeu-Entschlüsselung selten mehr als einmal aufrufe, würde es wohl keinen funktionalen Unterschied zwischen den Aufgaben in meinem Fall geben :-) –

+0

Außer dass sowohl 'ivy: configure>' als auch '' dauern können eine _settings ID_, so dass beide in der Lage sind, mehrere Einstellungen und mehrere Auflösungen zu verwenden.In den 'docs wird explizit darauf hingewiesen, aber beide Funktionen unterstützen diese Funktionen. Ich glaube, 'ist der Standard, der in Ivy 2.x verwendet wird, aber in meinem Fall verursachte mein' 'Probleme mit' ', aber nicht mit' '. –

+0

Vielleicht ist diese Frage am besten auf der Entwickler-Mailing-Liste veröffentlicht. Wie ich schon sagte, führe ich selten einen Efeu-Entschluss mehr als einmal in einem Build auf. Das erklärt, warum ich nie die Einstellungs-ID angeben muss. Ja, es ist ein bisschen wie ein Puzzle –

Antwort

4

hier ist was ich gefunden:

  • <ivy:settings> ist neuer und die bevorzugt Art und Weise.
  • <ivy:configure> kann oder darf nicht veraltet sein.
  • <ivy:settings> setzt meine Ivy-Einstellungen nicht, bis <ivy:resolve> aufgerufen wird, während <ivy:configure> alle Ivy-Einstellungen setzt, sobald die Aufgabe ausgeführt wird.

Der letzte ist mein Problem. Da ich parallele Jenkins-Builds habe und jeden Build mit einem komplett sauberen Cache starten möchte, verwende ich angepasste Cache-Einstellungen, abhängig von der Jenkins-Executor-Nummer. Die Caches sind mit cache-0 bis cache-5 gekennzeichnet.

Da jedoch <ivy:settings> nicht ausgeführt wird, bis ich <ivy:resolve> aufrufen, werden meine benutzerdefinierten Cacheeinstellungen nicht abgeholt. Ich rufe <ivy:cleancache> an, bevor ich Ivy aufrufe, was bewirkt, dass die Builds einen gemeinsamen Cache löschen. Heiterkeit folgt. Die Verwendung von <ivy:cofnfigure> behebt dieses Problem.

Verwandte Themen