La méthode décrite dans cet article pour utiliser maven pour empaqueter le projet dubbo dans un package jar pour l'exécution est la suivante : utilisez le plug-in d'empaquetage maven maven-jar-plugin pour ajouter du code à la fin du fichier pom.xml. . Les amis intéressés peuvent y jeter un œil, j'espère que cela pourra vous aider
Méthode d'emballage maven
Utilisez le plug-in d'emballage maven maven-jar-plugin
Ajoutez le code suivant à la fin du pom.xml
fichier. maven-dependency-plugin
fait référence à la copie du package jar dépendant dans le répertoire spécifié maven-resources-plugin
Copie des ressources dépendantes dans le répertoire spécifié
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <manifest> <!-- 是否依赖外部jar包 --> <addClasspath>true</addClasspath> <!-- 依赖外部jar包路径 --> <classpathPrefix>lib/</classpathPrefix> <!-- 启动函数 --> <mainClass>com.alibaba.dubbo.container.Main</mainClass> </manifest> </archive> <!-- 打包之后输出目录 --> <outputDirectory>${project.build.directory}/maven-archiver</outputDirectory> <!-- 剔除已打包的配置文件 --> <excludes> <exclude>*.*</exclude> <exclude>config/*</exclude> <exclude>config/tencent/*</exclude> <exclude>META-INF/spring/*</exclude> </excludes> </configuration> </plugin> <!-- 拷贝依赖的jar包到lib目录 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.8</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/maven-archiver/lib </outputDirectory> </configuration> </execution> </executions> </plugin> <!-- 拷贝依赖的资源文件包到resources目录 --> <plugin> <artifactId>maven-resources-plugin</artifactId> <executions> <execution> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/maven-archiver/resources</outputDirectory> <resources> <resource> <directory>${basedir}/src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins> </build>
La structure des répertoires après emballage
inclut les fichiers de classe et les informations sur les fichiers de configuration requis (à l'exclusion des fichiers de configuration exclus)
dans MANIFEST.MF
contient les informations nécessaires au fonctionnement
Class-Path: lib/commons-beanutils-1.8.3.jar lib/commons-betwixt-0.8.jar ... Main-Class: com.alibaba.dubbo.container.Main
java -jar
start command
java -jar Lors de l'exécution de la commande, le répertoire META-INFMANIFEST.MF sera utilisé Main-Class paramètre, c'est le point d'entrée de la fonction spécifiée lors du packaging.
java -jar x-0.0.1-SNAPSHOT.jar
java -cp
Commande de démarrage
java -cp .:x-0.0.1-SNAPSHOT.jar packname.mainclassname
Parce que j'ai besoin de référencer des fichiers de ressources externes dans mon projet, je le démarre généralement de cette façon
L'adresse du fichier de configuration est un chemin absolu
java -cp /Users/username/resources:dubbo-service-1.0.jar com.alibaba.dubbo.container.Main
-cp
et -classpath
ont le même effet
java -cp spécifie le chemin des autres classes dont dépend l'opération, généralement bibliothèques de classes, pour les packages jar et autres, plusieurs dépendances sont séparées par des points-virgules ";" sur Window
et ":" sur linux
.
Expression prend en charge les caractères génériques
java -cp .:/Users/username/*.jar packname.mainclassname
Si vous devez exécuter tous les packages jar dépendants dans un seul package jar, vous pouvez utiliser maven-shade-plugin
ceci plugin.
La fonction principale de ce plug-in est de regrouper le package jar dépendant dans le package jar actuel et de renommer la classe lors de l'empaquetage, ce qui peut résoudre le conflit multi-version du package jar. Pour plus de détails, vous pouvez vérifier. la documentation officielle du plug-in.
Tutoriels associés : Tutoriel vidéo Java
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!