Dove devo inserire il file log4j.properties quando utilizzo le directory Maven convenzionali?
Dove devo inserire il file log4j.properties quando utilizzo le directory Maven convenzionali?
Risposte:
src/main/resources
è il "posizionamento standard" per questo.
Aggiornamento: quanto sopra risponde alla domanda, ma non è la soluzione migliore. Controlla le altre risposte e i commenti su questo ... probabilmente non spediresti le tue proprietà di registrazione con il jar ma invece le lasceresti al client (ad esempio app-server, ambiente di stage, ecc.) Per configurare la registrazione desiderata. Pertanto, inserirla src/test/resources
è la mia soluzione preferita.
Nota: a proposito di lasciare la configurazione del registro concreto al client / utente, dovresti prendere in considerazione la sostituzione log4j
con slf4j
nella tua app.
resources
e log4j.properties
nella cartella indicata nella risposta.
src/main/resources
verranno copiati per impostazione predefinita intarget/classes
Basta metterlo dentro src/main/resources
lo impacchetterà all'interno del manufatto. Ad esempio, se il tuo artefatto è un JAR, avrai il log4j.properties
file al suo interno, perdendo il punto iniziale di rendere configurabile la registrazione.
Di solito lo inserisco src/main/resources
e lo imposto in modo che venga emesso come target in questo modo:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
Inoltre, affinché log4j possa effettivamente vederlo, è necessario aggiungere la directory di output al percorso della classe. Se il tuo artefatto è un JAR eseguibile, probabilmente hai usato il plugin maven-assembly per crearlo. All'interno di quel plug-in, è possibile aggiungere la cartella corrente del JAR al percorso della classe aggiungendo una Class-Path
voce manifest in questo modo:
<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>
Ora il file log4j.properties sarà proprio accanto al tuo file JAR, configurabile indipendentemente.
Per eseguire l'applicazione direttamente da Eclipse, aggiungi la resources
directory al tuo percorso di classe nella configurazione della corsa: Run->Run Configurations...->Java Application->New
seleziona la Classpath
scheda, seleziona Advanced
e naviga nella tua src/resources
directory.
${project.build.directory}
o deve essere modificato nel percorso effettivo del progetto nel mio disco locale?
Alcuni account di "data mining" rappresentano src/main/resources
il luogo tipico.
Risultati su Ricerca codice Google :
src/main/resources/log4j.properties
: 4877src/main/java/log4j.properties
: 215 resources
è resource
, se ricordo bene.
resource
era solo un errore di battitura.
Le risorse utilizzate per inizializzare il progetto sono preferibilmente inserite nella cartella src / main / resources . Per abilitare il caricamento di queste risorse durante la compilazione, è possibile semplicemente aggiungere voci nel progetto pom.xml nel progetto maven come risorsa di compilazione
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Altri file .properties possono anche essere conservati in questa cartella utilizzata per l'inizializzazione. Il filtro è impostato su true se si desidera avere alcune variabili nei file delle proprietà della cartella delle risorse e popolarle dai file delle proprietà dei filtri del profilo, che sono mantenuti in src / main / filters che è impostato come profili ma è un caso d'uso completamente diverso . Per ora, puoi ignorarli.
Questo è un ottimo plugin per risorse maven , è utile, basta sfogliare anche altre sezioni.
Quando si inseriscono file di risorse in un'altra posizione non è la soluzione migliore che è possibile utilizzare:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Ad esempio, quando i file di risorse (ad esempio jaxb.properties) vanno in profondità all'interno dei pacchetti insieme alle classi Java.
Se il tuo file log4j.properties o log4j.xml non trovato in src / main / resources usa questo PropertyConfigurator.configure ("log4j.xml");
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);
Aggiungi il codice seguente dai tag delle risorse nel tuo pom.xml all'interno dei tag build. quindi significa che i tag delle risorse devono trovarsi all'interno dei tag di compilazione in pom.xml
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>