Sto usando Maven nella mia applicazione stand-alone, e voglio confezionare tutte le dipendenze nel mio file JAR all'interno di una cartella di libreria, come accennato in una delle risposte qui:Come posso inserire tutti i file JAR richiesti in una cartella della libreria all'interno del file JAR finale con Maven?
How can I create an executable JAR with dependencies using Maven?
voglio il mio file JAR finale per avere una cartella della libreria che contiene le dipendenze come file JAR, non come quello che lo maven-shade-plugin
mette le dipendenze sotto forma di cartelle come la gerarchia Maven nella cartella .m2.
Bene, in realtà la configurazione corrente fa quello che voglio, ma sto riscontrando un problema con il caricamento dei file JAR quando si esegue l'applicazione. Non riesco a caricare le classi.
Ecco la mia configurazione:
<plugins>
<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}/classes/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.myapp.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>sources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
Il progetto funziona bene da Eclipse, ed i file JAR vengono inseriti nella cartella della libreria all'interno del mio file JAR finale come voglio, ma quando si esegue il file JAR finale da parte del cartella di destinazione ho sempre trovato ClassNotFoundException
:
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: com.myapp.MainClass. Program will exit.
Come posso risolvere questa eccezione?
quale comando usi per avviare il barattolo? probabilmente potresti preferire il plugin exec di maven? –
Il messaggio di eccezione non è aggiornato rispetto al file POM? Sembra che la classe principale 'com.myapp.MainClass' è stata cercata, non' com.tastycafe.MainClass'. –
@Duncan Jones, problema di copia incolla, ho modificato la domanda –