¿Cómo puedo crear un perfil de compilación de Maven para copiar archivos condicionalmente?

Soy nuevo en Maven y estoy tratando de crear pom.xml para construir los archivos de guerra para diferentes entornos usando perfiles

Entonces creé el objetivo de compilación

<build>
<finalName>myacct_okc</finalName>
<resources>
  <resource>
    <directory>src/main/java</directory>
    <excludes>
      <exclude>**/*.java</exclude>
    </excludes>
  </resource>
  <resource>
    <directory>src/main/resources</directory>
  </resource>
  <resource>
    <directory>config/${environment}</directory>
  </resource>
 </resources>
</build>

Y luego creó los perfiles para cada entorno

<profiles>
 <profile>
  <id>local</id>
  <activation>
    <activeByDefault>false</activeByDefault>
  </activation>
  <properties>
    <environment>local</environment>
  </properties>
</profile>
<profile>
  <id>jboss</id>
  <properties>
    <environment>jboss</environment>
  </properties>
</profile>
<profile>
  <id>dev</id>
  <properties>
    <environment>dev</environment>
  </properties>
</profile>

y creo una carpeta de configuración para cada env

project root
|-- src
|   |-- main
|   |   |-- java
|   |   |-- resources
|   |   |   |-- config.xml
|   |   |   +-- config.properties
|   |   |-- webapp
|   |   |   |-- META-INF
|   |   |   |   +--context.xml
|   |   |-- config
|   |   |   |-- local
|   |   |   |   |--config.properties
|   |   |   |   +--config.xml
|   |   |   |-- jboss
|   |   |   |   |--config.properties
|   |   |   |   +--config.xml
|   |   |   +-- dev
|   |   |   |   |--config.properties
|   |   |   |   +--config.xml
+--pom.xml

Ahora, cuando ejecuto este pom.xml con cualquier perfil para, por ejemplo, jboss, los archivos de la carpeta config / jboss no se copian (o quiero decir que los archivos en src / main / resources no se reemplazan).

Cuando habilité la depuración en Maven Build, puedo ver la copia ejecutándose.

 [DEBUG] resource with targetPath null
 directory C:\Projects\workspace\myaccount_build_4\myaccount\config\jboss
 excludes []
 includes []
 [DEBUG] ignoreDelta true
 [INFO] Copying 2 resources
 [DEBUG] file config.xml has a filtered file extension
 [DEBUG] copy C:\Projects\workspace\myaccount_build_4\myaccount\config\jboss\config.xml to C:\Projects\workspace\myaccount_build_4\myaccount\target\classes\config.xml
 [DEBUG] file config.properties has a filtered file extension
 [DEBUG] copy C:\Projects\workspace\myaccount_build_4\myaccount\config\jboss\META-INF\config.properties to    C:\Projects\workspace\myaccount_build_4\myaccount\target\classes\META-INF\config.properties

Pero no está reemplazando los archivos. Los archivos siguen siendo los mismos que los de src / main / resources.

La versión de Maven es 3.0.4

¿Alguien puede ayudarme en lo que estoy haciendo mal?

He mirado esta pregunta. Esto proporciona una solución, pero quiero anular los archivos en lugar de excluirlos y luego copiarlos.

Respuesta 1

Creo que tendrá que agregar sus recursos al complemento de recursos maven, dentro de una ejecución de recursos de copia.

<plugin>
  <artifactId>maven-resources-plugin</artifactId>
  <executions>
    <execution>
      <id>copy-config</id>
      <phase>copy-resources</phase>
      <goals>
        <goal>copy-resources</goal>
      </goals>
      <configuration>
        <outputDirectory>${project.build.outputDirectory}</outputDirectory>
        <resources>
          <resource>
            <directory>src/main/java</directory>
            <excludes>
              <exclude>**/*.java</exclude>
            </excludes>
          </resource>
          <resource>
            <directory>src/main/resources</directory>
          </resource>
          <resource>
            <directory>config/${environment}</directory>
          </resource>
        </resources>
      </configuration>
    </execution>
  </executions>
</plugin>
Respuesta: 2

¿Cuál es el formato de fecha de carga de la API de YouTube que puedo usar en SimpleDateFormat? ejemplo "2013-03-31T16: 46: 38.000Z" Se encontró la solución PS aaaa-MM-dd'T'HH: mm: ss.SSSX gracias

Estoy tratando de ejecutar un programa externo en Java y leer la salida. El programa es una aplicación de Linux en C ++ que ejecuta un algoritmo de minería de datos e imprime los patrones encontrados en la salida estándar. YO ...

El siguiente código se compiló correctamente aquí https://www.compilejava.net/ pero la ejecución falla Error: no se pudo encontrar o cargar la clase principal ClassDemo mientras que tiene un punto de entrada principal. Por qué ? ...

Sé que esto se ha preguntado y respondido mucho, pero todavía no tengo una buena solución y todavía no entiendo algunas partes. Así que tengo el requisito de compilar archivos * .java mediante programación. ...