S'appuyant sur PropertiesLauncher de Spring Boot, autodeploy réalise une analyse automatique de tous les jars dans le sous-répertoire jars.
La mise en œuvre spécifique est la suivante.
pom.xml spécifie le chemin de chargement et la méthode d'empaquetage de démarrage Spring
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<excludes>
<exclude>**/application-dev.properties</exclude>
<exclude>**/env.properties</exclude>
</excludes>
<archive>
<manifestEntries>
<Loader-Path>file:./jars</Loader-Path>
<mainClass>${start-class}</mainClass>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<mainClass>${start-class}</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
point clé
- La mise en page est en mode ZIP, ne vous laissez pas confondre par zip, la production est toujours un fichier jar, pas un fichier zip
- Spécifiez le chemin du chargeur sous forme de fichier: ./ jars
Méthode de démarrage
java -Dloader.debug=true -jar elasticjob-autodeploy-0.2.jar --spring.profiles.active=dev --spring.config.location=file:./jars/application-dev.properties
Le mode de production -Dloader.debug = true ci-dessus n'a pas besoin d'être utilisé, vous pouvez voir la sortie suivante:
Trying file: D:\mydocuments\as4_code\elasticjob\elasticjob-operator\target/loader.properties
Not found: file:D:\mydocuments\as4_code\elasticjob\elasticjob-operator\target/loader.properties
Trying classpath: /loader.properties
Not found: classpath:loader.properties
Trying classpath: /BOOT-INF/classes/loader.properties
Not found: classpath:BOOT-INF/classes/loader.properties
Property 'Loader-Path' from archive manifest: file:./jars
Nested archive paths: [file:./jars/]
Adding classpath entries from D:\mydocuments\as4_code\elasticjob\elasticjob-operator\target\jars
Adding classpath entries from nested jars/
Property 'Start-Class' from archive manifest: elasticjob.operation.simplejob.JobChangeListenerMain
Vous pouvez également spécifier vous-même le chemin de chargement
java -Dloader.debug=true -Dloader.path=../testjar -jar elasticjob-autodeploy-0.2.jar --spring.profiles.active=dev --spring.config.location=file:./jars/application-dev.properties
Trying file: D:\mydocuments\as4_code\elasticjob\elasticjob-operator\target/loader.properties
Not found: file:D:\mydocuments\as4_code\elasticjob\elasticjob-operator\target/loader.properties
Trying classpath: /loader.properties
Not found: classpath:loader.properties
Trying classpath: /BOOT-INF/classes/loader.properties
Not found: classpath:BOOT-INF/classes/loader.properties
Property 'loader.path' from environment: ../testjar
Nested archive paths: [../testjar/]
Adding classpath entries from D:\mydocuments\as4_code\elasticjob\elasticjob-operator\target\..\testjar
Adding classpath entries from nested ../testjar/
Property 'Start-Class' from archive manifest: elasticjob.operation.simplejob.JobChangeListenerMain
Enfin, pour l'uberjar empaqueté en mode non-zip, vous pouvez utiliser la méthode suivante pour exécuter
java -cp elasticjob-autodeploy-0.2.jar;elasticjob-autodeploy-example-0.0.1-SNAPSHOT.jar -Dloader.debug=true -Dloader.path=..\testjar -Dloader.main=elasticjob.operation.simplejob.JobChangeListenerMain -Dloader.config.name=application-dev org.springframework.boot.loader.PropertiesLauncher --spring.profiles.active=dev --spring.config.location=file:./application-dev.properties