Maison >Java >javaDidacticiel >Exemple de package zip personnalisé du projet Maven d'application Java (à lire absolument)

Exemple de package zip personnalisé du projet Maven d'application Java (à lire absolument)

黄舟
黄舟original
2017-05-21 10:38:161699parcourir

L'éditeur suivant vous présentera un exemple de création d'un package zip personnalisé pour un projet maven d'application Java (recommandé). L'éditeur pense que c'est plutôt bien, alors je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil

1. Configurez le fichier pom.xml et ajoutez le nœud de build

<build>
    <!-- 输出的包名 -->
    <finalName>p2p</finalName>


    <sourceDirectory>src/main/java</sourceDirectory>

    <resources>
      <!-- 控制资源文件的拷贝(默认复制到classes目录,最后打进jar包) -->
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <!-- 排除外置的配置文件(运行时注释上使IDE能读取到配置文件;打包时放开注释让配置文件外置方便修改) -->
        <excludes>
          <exclude>config.properties</exclude>
        </excludes>
      </resource>
      <!-- 配置文件外置的资源(存放到config目录,也是classpath路径,下面会配置) -->
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>config.properties</include>
        </includes>
        <targetPath>${project.build.directory}/config</targetPath>
      </resource>
    </resources>

    <plugins>
      <!-- 设置编译版本 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>

      <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <!-- 清单文件,设置入口类和classpath -->
            <manifest>
              <mainClass>com.hdwang.Application</mainClass>
              <addClasspath>true</addClasspath>
              <classpathPrefix>lib/</classpathPrefix>
            </manifest>
            <!-- 给清单文件添加键值对,增加classpath路径,这里将config目录也设置为classpath路径 -->
            <manifestEntries>
              <Class-Path>config/</Class-Path>
            </manifestEntries>
          </archive>
          <classesDirectory>
          </classesDirectory>
        </configuration>
      </plugin>


      <!-- 拷贝依赖的jar包到lib目录 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>
                ${project.build.directory}/lib
              </outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>


      <!-- 解决资源文件的编码问题 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>

      <!-- 自定义打zip包 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2.1</version>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/assembly.xml</descriptor>
          </descriptors>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

Faites attention à la partie police rouge dans ce fichier de configuration pom. Il s'agit de la configuration clé pour réaliser le fichier de configuration externe. L'idée est que le fichier de configuration ne doit pas être placé dans le package jar, mais placé à l'extérieur, et. ce dossier doit être défini comme chemin de classe, afin que le sous-programme puisse être facilement lu via le chargeur de classe. Ce qui suit est le code Java pour lire le fichier de configuration Le code n'a pas besoin d'être modifié lorsque l'EDI est en cours d'exécution ou après l'empaquetage, car le fichier de configuration peut toujours être trouvé à partir du chemin de classe ! ! !

Informations Maven du package d'outils

<dependency>
  <groupId>commons-configuration</groupId>
  <artifactId>commons-configuration</artifactId>
  <version>1.10</version>
</dependency>

2. Nouveau Le fichier de configuration assembly.xml du plug-in maven-assembly-plugin a le contenu suivant :

<assembly>
  <id>bin</id>
  <formats>
    <format>zip</format>
  </formats>
  <!-- 使用assembly拷贝依赖包 -->
  <!--<dependencySets>-->
    <!--<dependencySet>-->
      <!--<!– 是否包含自己(将项目生成的jar包也输出到lib目录) –>-->
      <!--<useProjectArtifact>false</useProjectArtifact>-->
      <!--<outputDirectory>lib</outputDirectory>-->
    <!--</dependencySet>-->
  <!--</dependencySets>-->
  <fileSets>
    <!-- 从目标目录拷贝文件去压缩 -->
    <fileSet>
      <directory>target</directory>
      <includes>
        <include>*.jar</include>
      </includes>
      <outputDirectory>/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>target/lib</directory>
      <outputDirectory>/lib</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>target/config</directory>
      <outputDirectory>/config</outputDirectory>
    </fileSet>

    <!-- 从源目录拷贝文件去压缩 -->
    <fileSet>
      <directory>src/main/run</directory>
      <includes>
        <include>*.sh</include>
        <include>*.cmd</include>
      </includes>
      <outputDirectory>/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>src/main</directory>
      <includes>
        <include>ReadMe.txt</include>
      </includes>
      <outputDirectory>/</outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

Ce plug-in s'exécute dans le cycle de vie du package , exécutez mvn package ou mvn install peut déclencher l'exécution de ce plug-in. J'ai commenté le code de copie des packages de dépendances ici car le plugin maven-dependency-plugin a été configuré dans le fichier pom.xml pour effectuer une telle opération, et il n'est pas nécessaire de répéter la configuration. fileSet peut configurer les fichiers qui doivent être copiés et compressés. Le chemin du répertoire est relatif au répertoire racine du projet, le chemin outputDirectory est relatif à la cible du répertoire de sortie et les inclusions peuvent filtrer les fichiers copiés. Ici, vous pouvez copier les fichiers dans le répertoire de sortie compressé. Cela devrait être dû au fait que ce plug-in s'exécute une fois le programme compilé et empaqueté, afin que nos exigences d'empaquetage personnalisées soient respectées : Compiler -> Copier les fichiers de ressources -> Emballage du projet -> Copier les dépendances Le package jar->assembly est copié et compressé. Utilisez ensuite le package zip généré pour le déployer et le publier, et il pourra être exécuté après décompression.

3. Schéma schématique du processus de packaging du programme

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn