martes, 17 de marzo de 2020

JavaFX (2) Empaquetar/distribuir la aplicación (1/2)

1. Introducción

He creado un proyecto maven en Eclipse, al final lo he hecho de este modo:

New->Maven->Maven Project -> marcar la casilla de "create simple project (skip archeype selection)


Y completamos los campos (observar que se crea el proyecto JavaFX02 y vamos a mostrar el JavaFX01)


Al final después de crear todas las clases y dejar el proyecto operativo vemos como lo muestra Eclipse


2. pom.xml (el fichero mas importante)

Según lo visto en una entrada anterior creamos este fichero pom.xml actualizado a las nuevas versiones que aparecen en maven. Con esto conseguimos:

1. Empaquetar los ficheros a la carpeta "target/MiCarpeta"
2. En esta carpeta se guarda:
    2.1 El fichero jar "MiJar.jar"
    2.2 La carpeta "lib" que contiene todas las librerías (jars)
3. Para ejecutar "MiJar.jar" hay que tener java13 y dar


java -jar MiJar.jar

#java_ximo -jar MiJar.jar

Donde java_ximo representa una copia de java.exe para el caso que se tenga una version de java distinta instalada. OJO: Hay que darle la ruta del "jdk13.02/bin" a la variable de entorno "PATH"

Veamos el fichero:


  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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>ximodante</groupId>
    <artifactId>JavaFX01</artifactId>
    <packaging>jar</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>13</maven.compiler.source>
        <maven.compiler.target>13</maven.compiler.target>
    </properties>
    <dependencies>
      <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>14</version>
     </dependency>
        
     <dependency>
       <groupId>org.openjfx</groupId>
       <artifactId>javafx-fxml</artifactId>
       <version>14</version>
     </dependency>
        
     <!-- https://stackoverflow.com/a/52654791/7704658 -->
     <dependency>
       <groupId>org.openjfx</groupId>
       <artifactId>javafx-graphics </artifactId>
       <version>14</version>
       <classifier>win</classifier>
     </dependency>
     
     <dependency>
       <groupId>org.openjfx</groupId>
       <artifactId>javafx-graphics </artifactId>
       <version>14</version>
       <classifier>linux</classifier>
     </dependency>
     
     <dependency>
       <groupId>org.openjfx</groupId>
       <artifactId>javafx-graphics </artifactId>
       <version>14</version>
       <classifier>mac</classifier>
     </dependency>
        
     <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
     <!--  
     <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
       <version>2.6</version>
     </dependency>
     --> 
        
     <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
     <!-- 
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-compress</artifactId>
       <version>1.20</version>
     </dependency>
     -->
     <!-- https://mvnrepository.com/artifact/org.tukaani/xz -->
     <!-- 
     <dependency>
       <groupId>org.tukaani</groupId>
       <artifactId>xz</artifactId>
       <version>1.8</version>
     </dependency>
     -->
       
    </dependencies>
    
    <build>
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
         <version>3.8.1</version>
         <configuration>
           <release>13</release>
         </configuration>
       </plugin>
            
       <plugin>
         <groupId>org.openjfx</groupId>
         <artifactId>javafx-maven-plugin</artifactId>
         <version>0.0.3</version>
         <configuration>
           <launcher>launcher</launcher>
           <mainClass>ximodante.JavaFX01.App</mainClass>
         </configuration>
       </plugin>
            
       <!--https://www.baeldung.com/learn-spring-security-course  -->
       <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.2</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>
            </configuration>
          </execution>
        </executions>
      </plugin>

     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <version>3.2.0</version>
       <configuration>
         <archive>
           <manifest>
             <addClasspath>true</addClasspath>
             <classpathPrefix>lib/</classpathPrefix>
             <mainClass>
                   ximodante.JavaFX01.NewMain
             </mainClass>
           </manifest>
           <manifestEntries>
             <Class-Path>.</Class-Path>
           </manifestEntries>
         </archive>
         <finalName>MiCarpeta/MiJar</finalName>
       </configuration>
     </plugin>
     <!-- fin -->
            
    </plugins>
  </build>
</project>

Lineas 14-24: Dependencias del javafx
Lineas 26-46: Se dan las dependencias para cada sistema operativo (linux, windows y mac) según dice José Pereda.
Líneas 48-72: Otras librerías que hagan falta como apache-commons etc (en este caso no ha hecho falta y se han comentado)
Línea 77-88: Compilador de maven (imprescindible)
Línea 87-95: javafx-maven-plugin (imprescindible si quieres ejecutar la aplicación desde Eclipse) y para crear una imágen (con todos los problemas que ello da)
Líneas 97-161: Para empaquetar y distribuir la aplicaión dentro de la carpeta "target/MiCarpeta" según una entrada anterior
Línea 151: La clase a ejecutar. Muy Importante

No hay comentarios :

Publicar un comentario