Maven - installation des artefacts à un dépôt local dans l'espace de travail
J'aimerais avoir une manière qui "mvn install' place les fichiers dans un dossier de référentiel sous ma source (la caisse) de base, et à l'aide de la 3e partie des dépendances de ~/.m2/repository.
Donc après "mvn install", la mise en page est:
/work/project/
repository
com/example/foo-1.0.jar
com/example/bar-1.0.jar
foo
src/main/java
bar
src/main/java
~/.m2/repository
log4j/log4j/1.2/log4j-1.2.jar
(En particulier, /travail/projet/dépôt ne contient pas de log4j)
Dans essense, je suis à la recherche d'un moyen de créer un composite référentiel qui fait référence à d'autres référentiels
Mon intention est d'être en mesure d'avoir des extractions multiples de la même source et de travailler sur chaque sans écraser les uns les autres dans le dépôt local avec "installer". Les extractions multiples peuvent être parce que de travail dans les différentes branches du cvs/svn, mais dans mon cas, c'est en raison de clonage de la branche master du dépôt git (dans git, chaque clone est comme une branche). Je n'aime pas les alternatives qui sont à utiliser une version spéciale/classificateur par la caisse ou à réinstaller (reconstruire) tout chaque fois que je l'interrupteur.
- Je pense que ce que vous cherchez est la dépendance:la copie des dépendances de l'objectif, Voir: maven.apache.org/plugins/maven-dependency-plugin/... il est souvent représenté comme un prélude à la construction d'un paquet installable, ou si vous voulez vous prévaloir d'un outil tiers qui va construire un chemin de classe de tous les pots dans un répertoire spécifié.
Vous devez vous connecter pour publier un commentaire.
Maven pouvez rechercher plusieurs référentiels (local, distant, "faux" de la télécommande) pour résoudre les dépendances, mais il n'est UN référentiel local où les artefacts sont installées au cours de
install
. Ce serait un véritable cauchemar pour installer des artefacts en des endroits précis et à maintenir cette liste sans casser quoi que ce soit, qui serait tout simplement pas travailler, vous ne voulez pas le faire.Mais, TBH, je ne comprends pas le point. Alors, pourquoi voulez-vous faire cela? Il y a peut-être d'autres et beaucoup plus simple des solutions, comme l'installation de vos objets dans le référentiel local et la copie de leur titre de votre projet racine. Pourquoi ne serait-ce pas le travail? J'aimerais vraiment savoir la finale intention bien.
Mise à JOUR: Avoir lu la mise à jour de la question initiale, la seule solution je pense (étant donné que vous ne voulez pas utiliser de versions/tags) serait d'utiliser deux espaces de stockage locaux et basculer entre eux (très enclins à faire des erreurs tout de même).
À faire, vous pouvez soit utiliser un compte d'utilisateur différent (comme le référentiel local est spécifique à l'utilisateur par défaut).
Ou de mettre à jour votre
~/.m2/settings.xml
chaque fois que vous voulez changer:Ou ont un autre
settings.xml
et point sur l'aide de la--settings
option:Ou spécifier l'autre emplacement sur la ligne de commande à l'aide de la
-Dmaven.repo.local
option:Ces solutions sont toutes sujettes à erreur comme je l'ai dit, et aucun d'eux est très satisfaisant. Même si vous pourriez avoir de très bonnes raisons de travailler sur plusieurs branches en parallèle, votre cas d'utilisation (pas de reconstruire tout) n'est pas très commun. Ici, en utilisant distincts des comptes d'utilisateur mlgh être la moins pire solution de l'OMI.
/work/project/repository
et~/.m2/repository
. Mais ce n'est pas possible, il y a UN seul référentiel local (là où il est situé). Veuillez préciser ce que vous essayez d'atteindre et de vos besoins. Comme je l'ai dit, je n'ai pas l'ensemble de la chose.Ce n'est pas possible avec le client en ligne de commande, mais vous pouvez en créer des plus complexes du référentiel mises en page avec un Maven repository server comme Nexus.
La raison pour laquelle il n'est pas possible, c'est que Maven permet d'imbriquer des projets et la plupart d'entre eux font référence les uns aux autres, de sorte que l'installation de chaque artefact dans un autre référentiel conduirait à beaucoup de recherches sur votre disque dur local (ou de l'échec de la construit lorsque vous démarrez un construire dans un sous-projet).
Pour info: liens symboliques de travail dans windows 7 et au-dessus de ce genre de chose est facile à réaliser si tout votre code va dans le même lieu dans les locaux de repo, j'.e /com/myco/.
type mklink pour plus de détails
C'est en EFFET possible avec la ligne de commande, et, en fait, est tout à fait utile. Par exemple, si vous souhaitez créer un autre repo titre de votre projet Eclipse, il suffit de le faire:
C'est le "localRepositoryPath" paramètre qui permet de diriger votre installation local pensions que vous voulez.
J'ai ceci dans un fichier de commandes que je lance à partir de ma racine du projet, et il installe le fichier dans un "repo" répertoire au sein de mon projet (d'où le % de paramètres). Alors, pourquoi voudriez-vous faire cela? Bien, laissez-nous vous dire que vous êtes les services professionnels d'un consultant, et vous rendent régulièrement dans les sites de nos clients, où vous êtes obligé d'utiliser leur sécurité trempé ordinateurs portables. Vous copiez votre auto-contenue projet à leur portable à partir d'une clé USB, et hop, vous pouvez faire votre maven build pas de problème.
Généralement, si vous êtes en utilisant VOTRE ordinateur portable, alors il est logique d'avoir un seul local repo qui a tout ce qu'il contient. Mais pour vous, qui suis arrogant et dit des choses comme: "pourquoi voudriez-vous le faire", j'ai des nouvelles...le monde est un endroit plus grand, avec plus d'options que vous pouvez réaliser. Si vous utilisez des ordinateurs portables qui ne sont PAS les vôtres, et vous avez besoin pour construire votre projet sur ce portable, obtenir l'résultant de l'artefact, puis retirez votre répertoire de projet (et le local repo vous venez de l'utiliser), c'est le chemin à parcourir.
Pourquoi vous voulez avoir 2 locaux de repos, la valeur par défaut .m2/repository est là que les entreprises standard des choses, et le local "dans le projet" repo est l'endroit où VOS trucs va.