genbetadev / Genbeta-Dev-Engine

Desarrollo de un Game Engine básico sobre C++ y SFML 2.1
MIT License
63 stars 32 forks source link

Maven como sistema de build (maven-nar-plugin) #79

Open danigomez opened 10 years ago

danigomez commented 10 years ago

Buenas, estaba pensando hacer un nuevo build usando Maven, ya que podriamos tener versiones diferentes de cada módulo según los cambios que se vayan haciendo, y en el proyecto principal elegir las versiones de cada uno. Como sabrán maven únicamente está hecho para java, pero buscando encontré un plugin que agrega un nuevo tipo de enpaquetado, los archivos NAR, que contendrian los .dll, .so, .exe, o el formato que corresponda según el SO en el que se ejecutó el build del proyecto. Maven usa un archivo de configuración de la estructura del proyecto llamado pom, cada pom define las dependencias que tiene el proyecto usando un repositorio de artefactos, es decir un paquete con los archivos que lo componen, por ejemplo, los .o de cada módulo de GDE. Por ejemplo, pom para una aplicación que utilize nuestro engine seria algo como esto:

<project>
  <groupId>TestGames</groupId>
  <artifactId>MyGame</artifactId>
  <packaging>nar</packaging>
   <version>1.0.0</version>
   <dependencies>
     <dependency>
          <groupId>GDE</groupId>
          <artifactId>GDE-lib</artifactId>
          <version>1.0.0</version>
          <type>nar</type>
     </dependency>
     <!-- Y otras dependencias propias del juego-->
   </dependencies>
</project>

Ahora lo que si me resulta interesante es para la compilación de GDE, ya que en ese caso tendriamos algo como esto:

<project>
  <groupId>GDE</groupId>
  <artifactId>GDE-lib</artifactId>
  <packaging>nar</packaging>
   <version>1.0.0</version>
   <dependencies>
     <dependency>
          <groupId>GDE</groupId>
          <artifactId>Core-module</artifactId>
          <version>1.0.0</version>
          <type>nar</type>
     </dependency>
     <dependency>
          <groupId>GDE</groupId>
          <artifactId>Log-module</artifactId>
          <version>1.0.0</version>
          <type>nar</type>
     </dependency>
     <dependency>
          <groupId>GDE</groupId>
          <artifactId>Util-module</artifactId>
          <version>1.0.0</version>
          <type>nar</type>
     </dependency>

   </dependencies>
</project>

De este modo tendriamos bien separado cada módulo en la compilación, y podriamos modificar independientemente cada uno de una manera bastante más visual, simplemente cambiando la versión. Bueno, esto es a grosso modo lo que pretendo hacer, al menos solo a modo de prueba, si están interesados, me lo pongo a investigar ! :P

rickyah commented 10 years ago

Yo no estoy interesado puesto que eso requiere una dependencia de Java para ejecutar el sistema. Y si hay que usar un sistema de build diferente y añadir dependencias yo usaría Rake (el Make de Ruby) que para mi es infinitamente superior a cualquier cosa hecha XML, por que para empezar es un DSL que usa un lenguaje de programación completo

danigomez commented 10 years ago

Mmmm, estuve revisando también Buildr, que tiene la misma idea que Maven pero usando Rake, tambièn podria ser interesante investigar eso, así evitamos Java y morirnos en el intento de esperar que arranque Maven jaja. @rickyah Tenés un ejemplo de un caso real usando Rake??

rickyah commented 10 years ago

Por ejemplo de caso real, ¿te refieres a proyectos que no sean Ruby?

Yo francamente tiraría por lo que estábamos usando de CMake, ya que múltiples IDEs tienen soporte directo para ese sistema de build lo que facilitaría las cosas.

danigomez commented 10 years ago

Claro, algún ejemplo de un proyecto C++ que use Rake o Buildr. Igualmente, no decía de reemplazar CMake con Maven o Buildr, si no para investigar alguna otra alternativa, jeje

rickyah commented 10 years ago

No conozco ninguno, pero salen unos cuantos buscando un poco. Por ejemplo hay incluso una gema para proyectos c++ / obj-c https://github.com/joeyates/rake-builder

Si he usado rake personalmente para gestionar proyectos medianos en C#.