27 de febrero de 2013

Parte de JavaFX para iOS y Android será como Open Source

Richard Bair anunció que Oracle liberará como Open Source la implementación de JavaFX para iOS y Android de JavaFX en un par de meses. Sin embargo, en una actualización matizó que sólo se liberará el sistema gráfico y de ventanas (Prism y Glass), para que la comunidad pueda experimentar. Para saber más de Prism y Glass, consultar JavaFX Architecture and Framework.

6 de febrero de 2013

Maven: Cómo mostrar la versión en la aplicación web

Si necesitas mostrar el número de versión del sistema en una aplicación web construída con Maven, puedes hacer que Maven la escriba en un archivo al momento de construir el WAR, y luego puedes usar una JSP para mostrar el contenido de dicho archivo. Para ello, necesitas configurar el filtrado de los recursos de la aplicación web en el maven-war-plugin. Un ejemplo:

Archivo src/main/webapp/version.txt:
${project.version}

Archivo src/main/webapp/index.jsp:
Versión: 

Archivo pom.xml:
<plugin>
  <groupid>org.apache.maven.plugins</groupid>
  <artifactid>maven-war-plugin</artifactid>
  <version>2.3</version>
  <configuration>
    <webresources>
      <resource>
        <!-- sustituye propiedades de Maven en el contenido de los archivos -->
        <filtering>true</filtering>
        <directory>src/main/webapp</directory>
        <includes>
          <include>**/version.txt</include>
        </includes>
      </resource>
    </webresources>
  </configuration>
</plugin>

30 de enero de 2013

Oracle: 'Debemos arreglar la seguridad en Java'

Imagen por :-Derek
'Debemos arreglar la seguridad en Java', reconocen dos empleados de alto nivel de Oracle [1].

Milton Smith, Lider de Seguridad de Java, y Donald Smith, Director de Desarrollo de Producto en OpenJDK, tuvieron una conferencia telefónica con varios líderes de los grupos de usuarios de Java (JUGs) [2].

Cuando se les cuestionó porqué el instalador de Java también instala la barra de herramientas de Internet del sitio Ask.com, comentaron: 'Esto es algo que Sun inició [...] No puedo discutir el asunto.'

También, ante la pregunta si Java se podría actualizar automáticamente como ya lo hace el navegador Google Chrome y el plugin de Adobe Flash, respondieron: "No hay planes [...] podría ser".

Parafraseando la cancion de Carly Rae Jepsen: 'Hey, Java's broken, and this is crazy, but here’s my bytecode, so fix it, maybe?'

[1] Referencia: JAXenter.
[2] Publicacón de Oracle con el audio: Oracle Speaks up on Java Security.

13 de diciembre de 2012

Maven: directorio con JAR de dependencias

En Java, si a tí te gusta como a mí tener en un subdirectorio los JARs de los que depende un ejecutable, pero también usas Apache Maven, seguro te preguntaste cómo crearlo.

Como sabes, Maven se usa para administrar las dependencias de un projecto en Java. Sin embargo, cuando se construye el proyecto sólo crea el JAR del mismo. Para que cree un subdirectorio que contenga los JARs de las dependencias, es necesario configurar el maven-dependency-plugin en el archivo pom.xml. Además, para que el archivo META-INF/MANIFEST.MF contenga el classpath apuntando a dicho subdirectorio, es necesario configurar el maven-jar-plugin:


<build>
   <plugins>
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
         <version>2.4</version>
         <configuration>
            <archive>
               <manifest>
                  <!-- agrega el classpath al archivo MANIFEST.MF-->
                  <addClasspath>true</addClasspath>
                  <classpathPrefix>lib-${project.version}/</classpathPrefix>
               </manifest>
            </archive>
         </configuration>
      </plugin>

      <plugin>
         <!-- crea un directorio que contenga los JARs de las dependencias -->
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-dependency-plugin</artifactId>
         <version>2.6</version>
         <executions>
            <execution>
               <id>copy-dependencies</id>
               <phase>package</phase>
               <goals>
                  <goal>copy-dependencies</goal>
               </goals>
               <configuration>
                  <outputDirectory>${project.build.directory}/lib-${project.version}</outputDirectory>
                  <includeScope>compile</includeScope>
                  <!-- en particular, no incluir las dependencias con scope test -->
               </configuration>
            </execution>
         </executions>
      </plugin>
   </plugins>
</build>