2011-10-07 17 views

Respuesta

49

creo que no hay mejor práctica para esto. En mi proyecto anterior, creé un directorio separado para almacenar dicho script SQL.

Por ejemplo src/main/db.

No se empacará en el JAR final de forma predeterminada (que es la forma preferida en la mayoría de los casos), pero es lo suficientemente conveniente como para dejarlo empaquetado en el ensamblaje. Incluso puede empaquetarlos en el artefacto principal JAR, agregando la declaración de recursos correspondiente o usando el plugin maven build-helper.

Sin embargo, todo depende de su uso en este script. Sin embargo, consideraría ponerlos en recursos solo cuando realmente sean recursos que su aplicación debe cargar.

+1

+1 de mi parte por simplicidad. – MaDa

+12

Me gustaría ir a src/main/sql similar a src/main/java y src/main/scala, ver http://maven.apache.org/pom.html#Resources – MeTTeO

2

Yo usaría src/main/resources para este propósito. Tal vez creando una subcarpeta allí.

4

src/main/resources es un buen lugar, pero recuerde que se empaqueta en su jar final, por lo que depende si desea revelar esto en su código de producción o no.

Si no es así, se puede filtrar esto añadiendo extracto de configuración experta-jar-plugin para apropiarse pom.xml:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <excludes>src/main/resources/privateSubdir/**</excludes> 
    </configuration> 
</plugin> 
+3

"... pero recuerde que se empaqueta en su jarra final, por lo que depende si desea revelar esto en su código de producción o no". Esta fue la razón exacta por la que dudé ponerlo en el directorio de recursos. Después de todo, interpreté que los "recursos" son más o menos el directorio de recursos JSF2 del que puedes arrastrar tus bibliotecas (referenciadas desde páginas web), por lo que las secuencias de comandos SQL no calificarían al respecto. – Kawu

+0

@Kawu En ese caso, es mejor mantener estas cosas totalmente fuera de los directorios del proyecto de Maven, aunque no las muevo para mi propia conveniencia. – MaDa

+0

Totalmente de acuerdo. Por lo general, los guardamos en una carpeta separada debajo de src/main, por lo que nunca existe la posibilidad de que se incluyan en el producto de compilación por error. Me gusta su idea de filtro aunque @MaDa – Perception

21

Creo que depende enteramente de cuándo y cómo se procesan estos scripts:

  1. Tiempo de Compilación: estas son cosas que consumen su compilador/cadena de herramientas y producir artefactos. La guía de maven sobre esto es muy clara, y por lo tanto los archivos pertenecerían a algún lugar en src/main/, como src/main/sql o src/main/db. Si bien no haría esto, podría ver que una tarea en compilación los utiliza para modificar su base de datos. Pude ver que los scripts de liquibase se usaban aquí y luego se ejecutaban a través de una tarea de experto.
  2. Runtime: estos son utilizados por su entorno de tiempo de ejecución y lo modifican o son consumidos por él para producir resultados. Colocarlos en src/main/resources parece razonable para que sus procesos de tiempo de ejecución puedan consumirlos. Cambie su base de datos como mejor le parezca; por ejemplo, como parte de su proceso hot-fix en la implementación o como parte de sus esfuerzos de versión de DB sobre la marcha. De nuevo, tal vez envíe liquibase con su aplicación, y luego realice cambios DB en ese lugar de esa manera ...
  3. Tiempo de diseño: Este parece ser el escenario más probable. ¿Dónde debo almacenar mi DDL para seguirlos correctamente en VCS, y aún mantener mi estructura compatible con maven? Para mí, esto es src/scripts/sql o src/scripts/db. Esto los coloca como archivos "fuente" dentro del ámbito de maven, pero en un lugar que está diseñado para usarse de una manera más ad-hoc.
0

Depende mucho de su kilometraje, pero ante todo es una buena idea separar la aplicación de la estructura de la base de datos subyacente.Por lo tanto, le recomendaré que mueva todas las cosas relacionadas con la base de datos a un proyecto separado de maven. Una vez hecho esto, las secuencias de comandos de la base de datos tienen una buena ranura en/src/main/scripts.

Cuestiones relacionadas