Heim  >  Artikel  >  Java  >  Beispiel für ein benutzerdefiniertes Zip-Paket eines Java-Anwendungs-Maven-Projekts (muss gelesen werden)

Beispiel für ein benutzerdefiniertes Zip-Paket eines Java-Anwendungs-Maven-Projekts (muss gelesen werden)

黄舟
黄舟Original
2017-05-21 10:38:161653Durchsuche

Der folgende Editor zeigt Ihnen ein Beispiel für die Anpassung eines zip-Pakets für ein Java-Anwendungs-Maven-Projekt (empfohlen). Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Editor, um einen Blick darauf zu werfen

1. Konfigurieren Sie die pom.xml-Datei und fügen Sie den Build-Knoten hinzu

<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>

Achten Sie auf den roten Schriftteil in dieser POM-Konfigurationsdatei. Dies ist die Schlüsselkonfiguration zur Realisierung der externen Konfigurationsdatei. Die Idee ist, dass die Konfigurationsdatei nicht in das JAR-Paket eingefügt, sondern außerhalb abgelegt werden sollte Dieser Ordner sollte als Klassenpfad festgelegt werden, damit die Unterroutine die Konfigurationsdatei problemlos über den Klassenlader lesen kann. Das Folgende ist der Java-Code zum Lesen der Konfigurationsdatei . Der Code muss nicht geändert werden, wenn die IDE ausgeführt wird oder nach dem Packen, da die Konfigurationsdatei immer im Klassenpfad gefunden werden kann. ! !

Maven-Informationen des Toolpakets

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

2. Neu Die Konfigurationsdatei „assembly.xml“ des Maven-Assembly-Plugin-Plugins hat folgenden Inhalt:

<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>

Dieses Plug-in läuft im PaketLebenszyklus , mvn package oder mvn inst ausführenall kann die Ausführung dieses Plug-Ins auslösen. Ich habe den Code zum Kopieren von Abhängigkeitspaketen hier auskommentiert, da das Maven-Dependency-Plugin in der Datei pom.xml für die Ausführung eines solchen Vorgangs konfiguriert wurde und keine Notwendigkeit besteht, die Konfiguration zu wiederholen. fileSet kann die Dateien konfigurieren, die kopiert und komprimiert werden müssen. Der Verzeichnispfad ist relativ zum Projektstammverzeichnis, der Ausgabeverzeichnispfad ist relativ zum Ausgabeverzeichnisziel und kann die kopierten Dateien filtern. Hier können Sie die Dateien in das komprimierte Ausgabeverzeichnis kopieren. Dies sollte daran liegen, dass dieses Plug-in nach dem Kompilieren und Packen des Programms ausgeführt wird, sodass unsere benutzerdefinierten Paketierungsanforderungen erfüllt sind: Kompilieren -> Ressourcendateien kopieren -> Projektpaketierung -> Abhängigkeiten kopieren Das JAR-Paket->Assembly wird kopiert und komprimiert. Verwenden Sie dann das generierte ZIP-Paket, um es bereitzustellen und zu veröffentlichen. Nach der Dekomprimierung kann es ausgeführt werden.

3. Schematische Darstellung des Programmpaketierungsprozesses

Das obige ist der detaillierte Inhalt vonBeispiel für ein benutzerdefiniertes Zip-Paket eines Java-Anwendungs-Maven-Projekts (muss gelesen werden). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn