Onde devo colocar o arquivo log4j.properties ao usar os diretórios convencionais do Maven?
Onde devo colocar o arquivo log4j.properties ao usar os diretórios convencionais do Maven?
Respostas:
src/main/resources
é o "canal padrão" para isso.
Atualização: O item acima responde à pergunta, mas não é a melhor solução. Confira as outras respostas e os comentários sobre isso ... você provavelmente não enviaria suas próprias propriedades de log com o jar, mas deixaria para o cliente (por exemplo, servidor de aplicativos, ambiente de estágio etc.) para configurar o log desejado. Assim, colocá-lo src/test/resources
é a minha solução preferida.
Observação: por deixar a configuração de log concreta para o cliente / usuário, considere substituir log4j
por slf4j
no seu aplicativo.
resources
e log4j.properties
na pasta mencionada na resposta.
src/main/resources
serão copiados por padrão paratarget/classes
Basta colocá-lo no src/main/resources
pacote dentro do artefato. Por exemplo, se seu artefato for um JAR, você terá o log4j.properties
arquivo dentro dele, perdendo o ponto inicial de tornar o registro configurável.
Eu costumo colocá-lo src/main/resources
e configurá-lo como saída para o destino da seguinte forma:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
Além disso, para que o log4j realmente o veja, você precisa adicionar o diretório de saída ao caminho da classe. Se o seu artefato for um JAR executável, você provavelmente utilizou o maven-assembly-plugin para criá-lo. Dentro desse plug-in, você pode adicionar a pasta atual do JAR ao caminho da classe adicionando uma Class-Path
entrada de manifesto da seguinte maneira:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.your-package.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Agora, o arquivo log4j.properties estará ao lado do seu arquivo JAR, configurável independentemente.
Para executar seu aplicativo diretamente do Eclipse, inclua o resources
diretório no caminho de classe na sua configuração de execução: Run->Run Configurations...->Java Application->New
selecione a Classpath
guia, selecione Advanced
e navegue até seu src/resources
diretório.
${project.build.directory}
ou deve ser editado para o caminho real que o projeto vive na minha unidade local?
Algumas "minerações de dados" são responsáveis por esse src/main/resources
local típico.
Resultados na Pesquisa de código do Google :
src/main/resources/log4j.properties
: 4877src/main/java/log4j.properties
: 215 resources
não resource
, se bem me lembro.
resource
foi apenas um erro de digitação.
Os recursos usados para inicializar o projeto são preferencialmente colocados na pasta src / main / resources . Para ativar o carregamento desses recursos durante a construção, basta adicionar entradas no pom.xml no projeto maven como um recurso de construção
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Outros arquivos .properties também podem ser mantidos nessa pasta usada para inicialização. A filtragem é configurada como true se você deseja ter algumas variáveis nos arquivos de propriedades da pasta resources e preenchê-las nos arquivos de propriedades dos filtros de perfil, que são mantidos em src / main / filters, que é definido como perfis, mas é um caso de uso completamente diferente . Por enquanto, você pode ignorá-los.
Este é um ótimo plug-in de recursos , é útil, basta navegar por outras seções também.
Quando colocar arquivos de recursos em outro local não é a melhor solução que você pode usar:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Por exemplo, quando os arquivos de recursos (por exemplo, jaxb.properties) vão fundo nos pacotes junto com as classes Java.
Se o arquivo log4j.properties ou log4j.xml não for encontrado em src / main / resources, use este PropertyConfigurator.configure ("log4j.xml");
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);
Adicione o código abaixo das tags de recursos em seu pom.xml dentro das tags de compilação. portanto, as tags de recursos devem estar dentro das tags de compilação no seu pom.xml
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>