Pregunta

Estoy construyendo una herramienta de línea de comandos que se basa en algunos de los archivos de configuración.

En el desarrollo, puse los archivos en src/main/resources, y acceder a getClass().getResourceAsStream("/config-file-name"), que funciona bien.

Puedo elegir maven-asamblea-plugin para generar el jar con todas las dependencias.

    <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.myproject.Scheduler</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
               <execution>
                   <id>make-my-jar-with-dependencies</id>
                   <phase>package</phase>
                   <goals>
                       <goal>single</goal>
                   </goals>
               </execution>
            </executions>
    </plugin>       

Los archivos de configuración están todos envueltos en el frasco, pero quiero separar de ellos.

Así, puedo agregar la siguiente configuración,

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>conf.properties</include>
            </includes>
            <filtering>true</filtering>
            <excludes>
                <exclude></exclude>
            </excludes>
        <targetPath>..</targetPath>             
        </resource>
    </resources>

Después de hecho esto, los archivos de configuración a lo largo de lado con el frasco en lugar de envuelto en un frasco.

Pero mi código no puede acceder a los archivos ahora.

¿Tengo que cambiar mi manera de acceder a los archivos en el código?

O debo necesidad de no poner esos archivos en src/main/resources/, cualquier alternativa?

Si alguien sabe, por favor ayuda.

Gracias.


Actualización:Finalmente, doy el uso de maven archivo de recursos, en lugar de eso, me puse la ruta de acceso del archivo en la misma ruta como tarro por defecto, todo funciona bien excepto el Eclipse se queja.

Ya quiero mover el archivo de configuración de tarro, y que no quiero es estar en destino/carpeta de clases, por lo que yo uso <targetPath>..</targetPath> para mover el configurar el archivo en el mismo directorio que el archivo jar.

Cuando puedo volver a generar el proyecto eclipse configuración de Eclipse dice:No se puede anidar la carpeta de salida "del proyecto/objetivo/prueba-clases" dentro de la carpeta de salida "del proyecto/objetivo".

Alguien que me ayude?

¿Fue útil?

Solución 3

Finalmente renunciar utilizar maven archivo de recursos, establecer la ruta de acceso del archivo en la misma ruta como tarro por defecto en lugar de eso, todo funciona bien excepto la de Eclipse se queja.

(Ya quiero mover el archivo de configuración de tarro, y que no quiero es estar en destino/carpeta de clases, así que yo uso ..para mover el configurar el archivo en el mismo directorio que el archivo jar.Cuando puedo volver a generar el proyecto eclipse configuración de Eclipse dice:No se puede anidar la carpeta de salida "del proyecto/objetivo/prueba-clases" dentro de la carpeta de salida "del proyecto/objetivo".)

No he encontrado solución hasta ahora, parece un eclipse error.

Ahora, doy Eclipse, y se ha cambiado para IntelliJ IDEA, es un buen IDE, especialmente perfectamente integrado con Maven.Voy a evitar cualquier posibilidad de usar eclipse para cualquier proyecto de maven.

Otros consejos

Su aplicación no puede acceder a los archivos de configuración, ya que no está en su ruta de clase.

Si desea separar los archivos de configuración desde el resto de la aplicación, puede que desee renueva en su formato de ensamblaje.Puede que desee utilizar bin en lugar de jar-con-las dependencias, a pesar de que viene con desafíos en la distribución y uso.

Dependiendo de la complejidad de la propiedad de archivo, puede utilizar el recurso plugin de filtro capacidad para cambiar el valor basado en maven perfiles.Por ejemplo, si usted quería tener una propiedad denominada ubicación se podría definir un dev y perfil de producción, y, a continuación, establezca el valor a una maven de la propiedad en el pom (o profiles.xml si estás en maven 2):

<properties>
  <my.location>the_real_value</my.location>
</properties>

A continuación, en el archivo de propiedades que usted haría esto:

location=${my.location}

Asegúrese de establecer el filtrado en su pom, así:

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

Cuando se construya, si se mira en el directorio de destino, y ver que la propiedad de archivo, usted debe ver el valor correcto sustituido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top