Différence entre maven champ d'application de la compilation et de la condition pour le POT de l'emballage
Quelle est la différence entre le maven portée compile
et provided
lors de l'artefact est construit comme un POT? Si c'était la GUERRE, je voudrais comprendre - l'artefact serait inclus ou pas dans WEB-INF/lib. Mais dans le cas d'un POT, il n'a pas d'importance - dépendances ne sont pas inclus. Ils doivent être sur le chemin de classe lors de leur champ d'application est compile
ou provided
. Je sais que provided
dépendances ne sont pas transitives - mais est-il seulement une différence?
Vous devez vous connecter pour publier un commentaire.
De la Maven Doc:
Récapitulatif:
JAR packaging
contexte. Maven doc ne parle pas de ce sujet. J'utilise Maven pour un certain temps, mais j'ai déjà demandé sur moi-même 🙂 il semble Donc que dansJAR packaging
contexte, il n'y a pas de différence entrecompile
etprovided
(à l'exception de la dépendance de transition). Suis-je le droit?compile
et de ne pas être si la portée estprovided
.Voici la référence.
mvn exec:java
est exécuté, mais un compilé de la dépendance.Voici la brève prise en charge des dépendances ( source maven doc )
compiler
C'est l'étendue par défaut, utilisé si aucun n'est spécifié. Compiler les dépendances sont disponibles dans tous les chemins de classe d'un projet. En outre, ces dépendances sont propagées à projets dépendants.
fournies
C'est un peu comme de la compilation, mais indique que vous attendez le JDK ou un conteneur de fournir la dépendance au moment de l'exécution. Par exemple, lors de la construction d'une application web pour le Java Enterprise Edition, vous devez définir la dépendance sur l'API Servlet et liées à Java EE Api de marge de manœuvre car le conteneur web fournit ces classes. Ce champ d'application est uniquement disponible sur la compilation et de test classpath, et n'est pas transitive.
d'exécution
Ce champ indique que la dépendance n'est pas requis pour la compilation, mais c'est pour l'exécution. C'est dans le moteur d'exécution et de tester les chemins de classe, mais pas le compiler classpath.
test
Ce champ indique que la dépendance n'est pas nécessaire pour l'utilisation normale de l'application, et n'est disponible que pour le test de compilation et d'exécution des phases. Ce champ n'est pas transitive.
système
De ce champ d'application est similaire sauf que vous devez fournir le BOCAL qui contient explicitement. L'artefact est toujours disponible et n'est pas recherché dans un référentiel.
import (disponible uniquement dans Maven 2.0.9 ou plus tard)
De ce champ d'application est uniquement pris en charge sur une dépendance de type pom dans la section. Il indique que la dépendance à être remplacée par la liste effective des dépendances dans le POM de la section. Depuis, ils sont remplacés, dépendances avec un périmètre d'importation ne sont pas réellement participer à la limitation de la transitivité d'une dépendance.
Si vous avez l'intention de générer un seul fichier JAR avec toutes ses dépendances (typique de la xxxx-all.jar), puis a assuré la portée des questions, parce que les classes à l'intérieur de ce champ d'application ne sera pas de package dans le BOCAL.
Voir maven-assembly-plugin pour plus d'informations
maven-assembly-plugin
, intéressant le plus voté réponses ne le mentionnent pas.Rendre disponible dans le chemin de classe, ne pas ajouter cette dépendance dans final jar si c'est normal jar; mais ajouter ce pot dans le pot, si final jar est un seul bocal (par exemple, exécutable jar)
Dépendance sera disponible au moment de l'exécution de l'environnement afin de ne pas ajouter cette dépendance dans tous les cas; même pas dans le seul bocal (c'est à dire exécutable jar etc)
Pour un fichier jar, la différence est dans le classpath figurant dans le MANIFESTE.MF fichier inclus dans le pot si addClassPath est définie sur true dans le maven-jar-plugin de configuration. 'compiler' dépendances apparaissent dans le manifeste, " à condition les dépendances ne sera pas.
L'une de mes bêtes noires, c'est que ces deux mots doivent avoir la même tendue. Soit compilées et fournies, ou de compiler et de fournir.