lunes, 5 de noviembre de 2018

Crear jar ejecutable con Maven que incluya recursos. Los jars en librerias a parte (2)

0. Introducción

Ya existe un post anterior que cubre este tema. Pero creo conveniente crear uno mas simple y actualizado a java 10 (tal vez 11).

Cuando tenemos recursos en la carpeta src/main/resources como por ejemplo el famoso fichero de definición de entidades JPA "persistence.xml"  , y le damos FileExport as Java Runnable, no recoge bien la localización de los ficheros de recursos.

Parea ello optamos por la solución de Crunchify adaptándola a nuesto proyecto.

Lo que nos insteresa es el código que aparece después de definir las dependencias (<dependencies>) del código del fichero pom.xml

Hay que destacar las siguientes versiones para que compatibilicen con Java 10

-Java : versión 10 en ${java.version} definida en <properties> y dispuesta en <source> y <target> del maven-compliler-plugin
-maven-compiler-plugin: versión 3.8.0
-maven-resources-plugin: versión 3.1.0
-maven-dependency-plugin: versión 3.1.1
-maven-jar-plugin: versión 3.1.1

También hay que tener en cuenta que

- Se genera la carpeta MiCarpeta que recibe el resultado del build. Se define en mave-resources-plugin en <outputDirectory>

- Se genera un jar llamado MiJar que se define en <finalName> del maven-plugin-jar donde se le indica también la carpeta: <finalName>MiCarpeta/MiJar</finalName>

-Se genera la carpeta lib dentro de MiCarpeta. Se define en maven-dependency-plugin en <outputDirectory>

- Hay que indicar el nombre completo de la clase a ejecutar y por tanto debe de tener un "main". Se indica en maven-jar-plugin en <mainClass>


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
<project>
  <!-- modelVersion, groupID.. -->
  <properties>
    <!-- otras propiedades -->
    <java.version>10</java.version>
  </properties>
  
  <dependencies>
    <dependency>
        <!-- ....... -->
    </dependency>
    <!-- mas dependencias -->
  </dependencies>
  
  
  <!-- COMPILER PLUGIN -->
  <!-- Esta si que va bien  http://crunchify.com/how-to-create-build-java-project-including-all-dependencies-using-maven-maven-resources-maven-dependency-maven-jar-plugin-tutorial/
  -->
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
          <configuration>
            <!-- release>10</release -->
            <source>${java.version}</source>
            <target>${java.version}</target>
            <showWarnings>true</showWarnings>
            <showDeprecation>true</showDeprecation>
          </configuration>
          
        </plugin>
      </plugins>
    </pluginManagement>
 
    <plugins>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
          <execution>
            <id>copy-resources</id>
            <phase>validate</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>${basedir}/target/MiCarpeta</outputDirectory>
              <resources>
                <resource>
                  <directory>resources</directory>
                  <filtering>true</filtering>
                </resource>
              </resources>
            </configuration>
          </execution>
        </executions>
      </plugin>
 
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.1.1</version>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}/MiCarpeta/lib</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>false</overWriteSnapshots>
              <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
          </execution>
        </executions>
      </plugin>
   
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.1.1</version>
        <configuration>
          <archive>
            <manifest>
              <addClasspath>true</addClasspath>
              <classpathPrefix>lib/</classpathPrefix>
              <mainClass>ximodante.orve.ORVETest</mainClass>
            </manifest>
            <manifestEntries>
              <Class-Path>.</Class-Path>
            </manifestEntries>
          </archive>
 
          <finalName>MiCarpeta/MiJar</finalName>
        </configuration>
      </plugin>
    </plugins>
  
  </build>
  
</project>


Para obtener el jar hacemos click derecho sobre el proyecto- Run AS- 4 Maven Build y seleccionamos clean install en el apartado goals como se indica en la imagen.




Ahora solo queda copiar la carpeta MiCarpeta (que está dentro de target)  a un equipo que tenga instalada una versión reciente de java y a funcionar.

No hay comentarios :

Publicar un comentario