Y compris les bibliothèques dans le bocal

Ok, voici donc ce que nous avons:

Nous avons deux paquets de bibliothèque, que nous avons compilé dans des bocaux.

paquet de starwars; 
public class JarJar { 

public void JarSayHello() 
{ 
Système.out.println("Jaaaaar!!"); 
} 

} 

paquet barwars; 
public class BarBar { 

public void BarSayHello() 
{ 
Système.out.println("Baaaaa!!"); 
} 

} 

Nous compilons ces avec

javac -d bin -sourcepath src src/barwars/BarBar.java 
jar cvf barwars.jar -C bin . 

et

javac -d bin -sourcepath src src/starwars/JarJar.java 
jar cvf starwars.jar -C bin . 

Tous les joliment dans des bocaux pour nous.

Maintenant, nous voulons inclure ces deux bocaux dans un autre projet java.

nous avons donc

  • /project/src/a_pack/HelloWorld.java
  • /project/libs/starwars.jar
  • /project/libs/barwars.jar
  • /project/manifest.txt
paquet a_pack; 
l'importation de starwars.JarJar; 
importation barwars.BarBar; 

public class HelloWorld { 

public static void main(String[] args) { 
Système.out.println("Hello, World"); 
JarJar myJar = new JarJar(); 
myJar.JarSayHello(); 
BarBar myBar = new BarBar(); 
myBar.BarSayHello(); 
} 

} 

Manifest.txt

Principal de la Classe: a_pack.HelloWorld 
Chemin de classe: libs/starwars.jar libs/barwars.jar 

Maintenant, nous le compiler avec:

javac -d bin -sourcepath src -cp "libs/starwars.jar;libs/*" src/a_pack/HelloWorld.java 
jar cvfm helloworld.jar manifest.txt -C bin . 

Et cette compile et fonctionne très bien.

Maintenant, j'ai deux problèmes.

Tout d'abord - si je déplace ce fichier jar à un autre endroit, et essayez de l'exécuter, puis je vais l'obtenir:

Exception in thread "main" java.lang.NoClassDefFoundError: starwars/JarJar

Maintenant je peux résoudre ce problème en déplaçant le dossier libs à l'endroit où j'ai déplacer le bocal. Mais ce qui me frappe comme une malpropre (si il y a déjà un dossier libs dans cet endroit?).

Idéalement ce que je voudrais faire, c'est d'inclure le référencés pots à l'intérieur du pot, donc il y a un pot qui contient tout ce qui est nécessaire pour exécuter à l'intérieur de lui-même.

Est-ce possible? (Et est-il une bonne pratique?)

  • Vous pouvez l'examiner comment Maven permet de résoudre ce.
InformationsquelleAutor dwjohnston | 2013-05-27