Локално хранилище на Maven

Знам, че това не е идеята зад Maven, но:

Бих искал да имам локално maven repo (.m2) в директорията progect с относителен път. Има ли някакъв начин да накарам моя пом да направи това? Има ли по-добра алтернатива?

Така че основно това, което искам, е да не бъда зависим от никакви външни хранилища.

Благодаря за помощта :)

PS1 - Аз съм нещо като java noob (c/c++ тук) и пълен maven
PS2 - Файлът settings.xml в dir/conf за инсталация на maven има елемент localRepository, но вярвам, че не мога да имам относителна кръпка там. Освен това това няма да бъде свързано с проекта, а с кутията, където е инсталиран maven.


person Uglakh    schedule 12.01.2012    source източник
comment
Можете да опитате да зададете localRepository в командния ред (-DlocalRepository) или във вашия pom (‹properties›‹localRepository›...), въпреки че се съмнявам, че последният ще работи. Какво се опитваш да постигнеш? Хранилищата на ниво POM вероятно ще нарушат многомодулна компилация, тъй като един модул не би могъл да намери своите (току-що изградени) зависимости. Обикновено хората използват настройката localRepository, за да предотвратят потенциално „замърсяване“ от една среда за изграждане в друга – и това е напълно добре, но това се прави на ниво извикване на mvn, а не на ниво pom.   -  person ptyx    schedule 13.01.2012


Отговори (2)


Обърнете внимание, че в pom.xml можете да зададете препратката към зависимостта към местоположението на конкретен jar файл, съхраняван във файловата система, да предположим, че имате подпапка lib в основната папка на проекта, която съдържа всички jar библиотеки:

<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.0.4</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/lib/commons-logging-1.0.4.jar</systemPath>
</dependency>

Правейки това, groupId, artifactId и версията стават безсмислени. От моя собствен опит видях проект на oracle преди, който има много персонализирани буркани с други, които не са достъпни чрез онлайн хранилище на maven, грозно, но изпълнимо.

person yorkw    schedule 12.01.2012
comment
Вярвам, че това е, което търся! Мерси - person Uglakh; 13.01.2012
comment
@Uglakh, ако отговорът помага, помислете дали да гласувате или да го приемете :) - person yorkw; 13.01.2012
comment
Не мога да гласувам за (това получавам, защото бях дебнещ, нямах достатъчно представител) Но го приемах, thx @yorkw - person Uglakh; 13.01.2012

Бих искал да имам локално maven repo (.m2) в директорията progect с относителен път. Има ли някакъв начин да накарам моя пом да направи това?

Да, има начин: можете да посочите път към локално репо, като посочите в $M2_HOME\conf\setting.xml

Но този подход наистина не е добър, ако вие (или други разработчици) работите с повече от един проект.

Има ли по-добра алтернатива?

Да, има по-добра алтернатива:) Можете да импортирате всеки буркан във вашето локално хранилище на maven, така че няма да зависи от централното репо на maven и няма да бъдете принудени да съхранявате локално хранилище във вашия проект. Вижте тази малка статия Как да включите потребителски Библиотека в локалното хранилище на Maven?, за да научите как да го направите.

С този подход можете да съхранявате всички необходими буркани на трета страна във вашия проект, както и скрипт на обвивка/пакет, който импортира буркани в локалното репо. И разработчиците просто ще изпълнят скрипта, за да импортират зависимости към локално репо, вместо да променят настройките на maven, за да използват локално репо от някакво конкретно място (от проекта).

person Valentin Kovalenko    schedule 19.03.2013