Estoy tratando de filtrar una Primavera archivo de configuración utilizando Maven filtrado. Mi POM está configurado de esta forma:

        ...
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          <version>2.2</version>
          <configuration>
            <webResources>
              <resource>
                <filtering>true</filtering>
                <targetPath>WEB-INF/context</targetPath>
                <directory>src/main/webapp/WEB-INF/context</directory>
                <includes>
                  <include>applicationContext.xml</include>
                </includes>
              </resource>
            </webResources>
          </configuration>
        </plugin>
        ...

y

  <profiles>
    <profile>
        <id>desarrollo</id>
         <activation>
          <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <filters>
              <filter>src/main/properties/dev.properties</filter>
            </filters>
      </build>
    </profile>
    <profile>
        <id>pruebas</id>
        <build>
            <filters>
              <filter>src/main/properties/test.properties</filter>
            </filters>
      </build>
    </profile>
            ...

Funciona muy bien cuando se invoca Maven directamente.

Por desgracia, cuando esté bien caliente-implementación de la aplicación web en Tomcat 6 con Eclipse WTP y m2e siempre elige la versión sin filtrar de applicationContext.xml. (El archivo applicationContext.xml en la carpeta de destino/m2e-wtp/web/recursos en WEB-INF/contexto nunca es filtrada)

No puedo encontrar cualquier documentación útil sobre el tema. Ni siquiera estoy seguro de si es implementada en m2e.

Algo está mal con la configuración de mi o esta es una características no implementadas?

InformationsquelleAutor Juan Calero | 2012-03-21

6 Comentarios

  1. 26

    Bueno, por fin lo he conseguido.

    Primero de todo, hice lo que khmarbaise señaló. Me mudé applicationContext.xml en la carpeta de recursos. La guerra plugin webResources están diseñados para trabajar con recursos externos, y el filtrado de un archivo en la carpeta de destino no era la mejor práctica.
    He actualizado el POM para reflejar la nueva configuración

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>

    y

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <webResources>
                        <resource>
                            <filtering>true</filtering>
                            <targetPath>WEB-INF/context</targetPath>
                            <directory>src/main/resources/WEB-INF/context</directory>
                            <includes>
                                <include>applicationContext.xml</include>
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>

    Así, la mitad de los créditos para él.
    Pero eso no fue suficiente, todavía no trabajó.
    Me di cuenta de que Maven/m2e era de hecho el filtrado de mi archivo, pero no se mi definidas las propiedades de los archivos. Después de algunas pruebas me enteré de que m2e está ignorando el activeByDefault opción en los perfiles de activación de la sección.

    Así, he añadido mi perfil predeterminado para el proyecto Maven de configuración y, a continuación, se trabajó

    Web de recursos de filtrado con Maven guerra plugin no funciona en Eclipse con m2e

    • configurar el perfil predeterminado hizo el truco para mí. ty
  2. 9

    He tenido un problema similar con el filtrado de la web.xml. He resuelto el problema al importar todo el proyecto en eclipse.

    La razón era un corrupto /.ajustes/org.eclipse.wst.común.archivo del componente. En este archivo de la orden de los archivos copiados en el servidor web local implementar directorio se define. Por ejemplo:

    <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
      <wb-module deploy-name="liquidvote-rest">
        <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
        <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
        <property name="context-root" value="myapp"/>
        <property name="java-output-path" value="/myapp/target/classes"/>
      </wb-module>
    </project-modules>

    Si el web.xml o application.xml existe en varios directorios será tomado desde el primer directorio que se encuentra. Por lo tanto, es importante que

        <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>

    es la primera entrada.

    Encontrarás más información en http://wiki.eclipse.org/M2E-WTP_FAQ en la sección «¿Qué es esto de la web de la carpeta de recursos?»

  3. 1

    ¿Has probado a poner los recursos en src/main/resources/WEB-INF/… en lugar de y configurado el área de recursos a filtro de los recursos en lugar de poner la configuración en un defecto no maven ubicación.

    • ¿Te refieres a mover applicationContext.xml o los archivos de configuración? En el primer caso, supongo que yo podría hacerlo, pero ¿cómo le digo Maven para copiar el archivo a la derecha ruta de destino? Además, mi Resorte principal archivo de configuración no estará en su supuesta ubicación en el proyecto, y esto no es intuitiva. En el segundo caso, yo colud mover mis archivos de configuración de allí, pero, a continuación, los archivos se copian en el destino de la guerra, żno? y eso no es lo que yo quiero (esas propiedades son sólo para el Maven de filtrado, que no son necesarios en tiempo de ejecución)
    • El filtro de archivos podría ser ubicado en otra carpeta que no sea la src/main/resources por ejemplo src/main/filtro ? Además, el applicationContext.xml debe estar ubicado en el directorio src/main/resources/WEB-INF/..?
  4. 0

    Yo solo tuve un problema similar. Mi solución no es elegante y no estoy orgulloso de ello, pero digamos que es aceptable. En mi caso tengo un resorte de arranque aplicación mvc con arrogancia aplicación (para testers para probar nuestra API). La cosa es que estamos usando esta aplicación en dos ambientes, por lo que he creado dos perfiles de desarrollo y prueba. En dev env nos gustaría fuego de la aplicación desde eclipse solo con «ejecutar como» por lo que el contexto camino está en blanco (sé que se puede establecer en la primavera de java config, pero no es el único marcador de posición que nos gustaría cambiar) y en la prueba de env se ejecuta la aplicación en nuestra versión personalizada de tomcat… por lo que el contexto ruta de acceso es la misma como la guerra de nombre de archivo.

    y aquí está el problema – swagger está llamando resto docs en este contexto, la ruta y depende de la primavera de perfil. Así que tenemos una web de recursos que necesita ser filtrada. Al principio traté de usar m2e-planta de filtrado:

    ...
    <build>
    <plugins>
    <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <webResources>
                            <resource>
                                <filtering>true</filtering>
                                <directory>src/main/webapp</directory>
                                <includes>
                                    <include>**/scripts.js</include>
                                </includes>
                            </resource>
                        </webResources>
                    </configuration>
                </plugin>
    ...

    estaba funcionando, pero sólo se ejecuta en incrustados en eclipse, tomcat o desde la línea de comandos java -jar que no estaba trabajando con «ejecutar como» de eclipse.

    El recurso fue filtrada y los vi en la web de recursos en el objetivo, pero el eclipse parece ser que se ejecuta en un código fuente directamente o está haciendo una copia no sé… que no se puede ver filtrada recursos… así que he pensado que voy a hacer algo como esto:

    <resources>
                <resource>
                    <directory>src/main/resources</directory>
                </resource>
                <resource>
                    <filtering>true</filtering>
                    <directory>src/main/resources/webapp/swagger</directory>
                    <targetPath>${basedir}/src/main/webapp/swagger</targetPath>
                    <includes>
                        <include>scripts.js</include>
                    </includes>
                </resource>
            </resources>

    No es la más afortunada solución, porque es modificar el código y no el objetivo, pero al menos se está trabajando. Si alguien tiene alguna sugerencia de cómo hacer que funcione sin modificaciones del código estaría greateful.

  5. 0

    Hoy he tenido un problema similar cuando varios frascos fueron incluidos en la guerra. Me puse el filtrado,y en comparación con el original de los frascos con el filtrado. Parecen ser el mismo,pero esto no es cierto. Traté de cambiar el nombre de jar a zip y yo no era capaz de desempaquetar el contenido debido a la estructura dañada en el interior de un tarro(zip), mientras que el original estaba bien. También se menciona aquí la adición de filtrado de recursos en la web donde se dice que el filtrado se ha establecido en false para evitar corromper sus archivos binarios.

  6. 0

    He probado con todo lo descrito anteriormente sin éxito. Los archivos se filtraron y se genera correctamente en el «m2e-wtp de carpeta», pero por alguna razón Eclipse fue copiar los archivos de destino «/clases».

    Por lo tanto, he cambiado mi pom.xml, cambiar la carpeta de destino de «m2e-wtp» a «objetivo/clases», como el código de anticipación.

    Importante: cada vez que usted necesita para ejecutar una maven build del proyecto, debe cambiar el pom con el fin de construir de proyecto.

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.4</version>  
        <configuration>
            <failOnMissingWebXml>false</failOnMissingWebXml>
            <filters>
                <filter>${project.basedir}/src/main/filters/${build.profile.id}/config.properties</filter>
            </filters>
            <webResources>
                <resource>
                    <filtering>true</filtering>
                    <directory>${project.basedir}/src/main/resources</directory>
                    <targetPath>${project.basedir}/target/classes</targetPath>
                    <includes>
                        <include>*.properties</include>
                        <include>*.xml</include>
                        <include>META-INF/spring/*.xml</include>
                    </includes>
                </resource>
            </webResources>
        </configuration>
    </plugin>
    • Em português: Tentei todas como respuestas, para mim nenhuma trabajar. Os arquivos eran filtrados e gerados apropiadamente na pasta «m2e-wtp», porém por madera de sándalo motivo o Eclipse continuava pegando os arquivos filtrados diretamente hacer «target/clases». ¿qué idioma es este?

Dejar respuesta

Please enter your comment!
Please enter your name here