Ho riscontrato anche questo scenario. In sostanza, si desidera essere in grado di eseguire il codice localmente da Eclipse utilizzando un file userConfig.properties facilmente accessibile, ad esempio all'interno di /src/main/resources
. Inoltre, si desidera fornire un JAR eseguibile compilato con un utente esterno userConfig.properties che consente all'utente di configurare l'applicazione senza danneggiare il JAR.
mia implementazione è la seguente: in esecuzione mvn clean install
sarà:
- creare JAR eseguibile con il specificato
mainClass
- esclude tutti
.properties
file che si trovano nella src/main/resources
dalla JAR
- progetto copia dipendenze in una cartella
lib
nella radice del progetto
- copia tutti i file
.properties
situati in src/main/resources
in unCartellanella root del progetto. Nota che questo passaggio è una comodità opzionale per i tuoi utenti del JAR. È possibile richiedere la creazione esplicita di questo file nella directory conf
. Questa directory conf
viene effettivamente aggiunta al percorso di classe runtime tramite manifest.
- aggiungere questa cartella
conf
al manifesto, che fornisce l'accesso ad esso dal vostro JAR eseguibile
Usando questi plugin Maven in congiunzione con l'altro nella configurazione POM vi darà ciò che vi serve. Per quanto riguarda le "migliori pratiche" di questa soluzione; Non ne sono sicuro.
Utilizzando Maven-dipendenza-plugin come segue:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
Utilizzando Maven-jar-plugin come segue:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3</version>
<configuration>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>package.path.to.your.main.class.MainClass</mainClass>
</manifest>
<manifestEntries>
<Class-Path>conf/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
Utilizzando Maven-risorse-plugin come segue:
Utilizzando questa configurazione di progetto, posso eseguire in Eclipse utilizzando una configurazione e fornire ai miei utenti un file di proprietà da configurare, senza che le proprietà passino l'una sull'altra.
La tua domanda non ha alcun senso. Dici che vuoi escludere un file, ma poi dici che la tua app non funziona perché il file è escluso. Quindi, perché hai voluto escluderlo in primo luogo? –
Stai usando il framework Spring? –
Sì, Chris Sto usando Spring Framework. –