2016-03-04 17 views
10

Come guidato dal nome del thread, vorrei creare una libreria JAVA utilizzando Spring Boot. Ho trovato questa discussione: Creating a library jar using Spring boot. Tuttavia, gli obiettivi di quel thread sembrano essere risolti implementandolo come API REST.Possiamo implementare una libreria Java utilizzando Spring Boot?

Attualmente sto sviluppando una libreria JAVA basata su Spring utilizzando Spring Boot. E, ho provato a fare il pacchetto come un file jar e lasciare che un'altra applicazione JAVA lo usi in termini di una libreria JAVA. Purtroppo, ho scoperto che quando l'applicazione chiamante richiama alcuni metodi della libreria aggiunta, le configurazioni definite all'interno della libreria non funzionano affatto su. Mostra anche un errore come "CommandLineRunner non esiste".

Per ulteriori informazioni, uno snippet del file pom.xml è mostrato di seguito. Secondo la configurazione, non includo le dipendenze per le applicazioni web.

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.3.RELEASE</version> 
</parent> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.assertj</groupId> 
     <artifactId>assertj-core</artifactId> 
     <version>2.3.0</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

risposta

10

quando progettati in modo corretto questo non dovrebbe essere un problema a tutti. Ma in dettaglio dipende da quali funzioni stai usando. Poiché Spring supporta libreria esterna come JPA, Websocket, ..

Esistono due annotazioni importanti per sviluppare una libreria e utilizzarla in un altro progetto.

Il primo è semplicemente @Configuration e l'altro è @Import.

Library Project

Mettere una classe nel package principale, che sembra qualcosa di simile.

@Configuration // allows to import this class 
@ComponentScan // Scan for beans and other configuration classes 
public class SomeLibrary { 
    // no main needed here 
} 

altro progetto che utilizza la libreria

Come al solito mettere una classe nel package principale del progetto.

@SpringBootApplication 
@Import(SomeLibrary.class) // import the library 
public class OtherApplication { 
    // just put your standard main in this class 
} 

E 'importante tenere a mente, che le altre cose potrebbero essere necessarie a seconda di ciò che la vostra utilizzando in termini di altri framework. Ad esempio se si utilizza dati di primavera l'annotazione @EntityScan estende la scansione di sospensione.

+0

Grazie mille per la tua chiara spiegazione. Quindi, secondo il tuo suggerimento, anche l'** altro progetto ** deve essere una ** applicazione basata su Spring **? Inoltre, se possibile, puoi correggere il tuo esempio perché quelle due classi hanno lo stesso nome? – xlives

+0

Corretto un errore di copia incolla. Se vuoi farlo in questo modo è necessario che anche l'applicazione "altra" sia un'app di primavera. È possibile creare una sorta di libreria self-contentint, ma ciò è più complicato e difficile da spiegare in un post StackOverflow. (Eviterei questo approccio) –

+0

Grazie. Forse, potrei chiederti la soluzione tramite altri canali come la posta elettronica più tardi. Supponiamo che vado a rendere sia il progetto della libreria che l'altro progetto come applicazioni Spring Boot. Quindi, come posso aggiungere il contenitore della libreria nell' ** altro progetto **? – xlives