L'autre jour, j'ai appris la compilation Java et la gestion des paquets lors d'une session d'étude en interne. Étant donné que je ne pouvais modifier que l'environnement créé avec eclipse, la définition des options de compilation et la création de packages m'ont donné l'occasion de mieux comprendre le comportement de la compilation et comment gérer les packages. Je vais le publier ici comme un examen de moi-même.
・ CentOS7.4 -Java 1.8.0_171 ・ Vi 7.4 ・ Arbre 1.6.0
Créez un répertoire pour vérifier l'opération.
# cd
# mkdir -p JAVA/src
# cd JAVA
# mkdir class
Si vous regardez la hiérarchie des répertoires à partir du répertoire courant avec la commande tree, ce sera comme suit.
# tree --charset=c
.
|-- class
`-- src
Commencez par passer à src et créez un fichier source de test.
# cd src
# vi TestJava.java
TestJava.java
class TestJava {
public static void main(String[] args){
System.out.println("test");
}
}
Après avoir créé avec le contenu ci-dessus, si vous vérifiez la hiérarchie des répertoires, ce sera comme suit.
# tree ../ --charset=c
../
|-- class
`-- src
`-- TestJava.java
Compilez le fichier créé. Ici, si vous compilez sans spécifier d'options, un fichier de classe sera créé sous src, mais il est difficile de déplacer le fichier de classe vers un autre répertoire après sa création. Même dans eclipse, cette zone était faite automatiquement, donc je ne l'ai pas sentie, mais si vous le faites manuellement, spécifiez l'option pour qu'elle soit créée dans le répertoire spécifié (répertoire de classe) au moment de la création. Utilisez l'option "-d" pour spécifier le répertoire.
# javac -d ../class TestJava.java
Après exécution, vérifiez l'état de la hiérarchie des répertoires.
# tree ../ --charset=c
../
|-- class
| `-- TestJava.class
`-- src
`-- TestJava.java
Un fichier a été créé dans le répertoire de classe spécifié. De cette manière, le fichier source et le fichier de classe sont gérés séparément afin que personne ne puisse modifier la source sans autorisation.
Pour l'exécuter depuis l'extérieur du répertoire de classe au moment de l'exécution, spécifiez le chemin du fichier avec l'option "-cp" pour l'exécuter même s'il n'y a pas de fichiers dans le répertoire en cours. Il s'agit de la méthode lorsque CLASSPATH défini par la variable d'environnement est exécuté sur la ligne de commande.
# java -cp ../class TestJava
test
Il a été exécuté et "test" a été produit.
Si le nombre de fichiers de classe augmente, gérez les packages séparément pour faciliter la gestion. En outre, il est bon d'éviter les conflits de noms même si vous créez un fichier avec le même nom lors du développement avec plusieurs personnes. Tout d'abord, créez un répertoire pour le package dans le répertoire src, supprimez une fois le fichier de classe et vérifiez.
# mkdir pack1
# mv TestJava.java pack1
# rm -rf ../class/TestJava.class
# cd pack1
# tree ../../ --charset=c
../../
|-- class
`-- src
`-- pack1
`-- TestJava.java
Uniquement dans le répertoire src, un fichier est créé dans le répertoire du package.
Lorsque vous utilisez le package, ajoutez la description suivante au début de la source.
package Nom du package
Un exemple de description est le suivant.
TestJava.java
package pack1;
class TestJava {
public static void main(String[] args){
System.out.println("test");
}
}
Décrivez le nom du package créé au début du fichier source comme ceci. Cette fois, nous ne testerons qu'avec un nom de package simple, mais en réalité, nous allons créer un répertoire en creusant une hiérarchie comme jp / co / testcomp / cv```. Ensuite, lors de sa description dans la source, le délimiteur de hiérarchie est représenté par "." Comme
package jp.co.testcomp.cv;
`.
Comme dans l'exemple, il est recommandé que le nom du package commence par l'inverse du nom de domaine Internet. En effet, il est recommandé de nommer le package à partir du nom de domaine qui diffère selon le pays ou la société afin que le nom du package ne soit pas en conflit lors de l'utilisation de programmes d'autres sociétés ou d'autres pays.
Essayons encore.
# javac -d ../class pack1/TestJava.java
# tree ../ --charset=c
../
|-- class
| `-- pack1
| `-- TestJava.class
`-- src
`-- pack1
`-- TestJava.java
Un fichier a été créé pour chaque répertoire pack1 dans le répertoire de classe. S'il n'y a pas de description de package dans le fichier source, seul le fichier de classe sera créé sans le dossier pack1 dans le répertoire de classe.
Il est bon de faire correspondre la hiérarchie des fichiers source et de classe afin de ne pas créer de confusion dans la destination de stockage. N'oubliez donc pas la description du colis. (Bien que l'éclipse puisse détecter des erreurs)
À propos, l'exécution est spécifiée comme suit.
# java -cp ../class pack1.TestJava
test
Dans le chemin de la classe, spécifiez le répertoire de la classe, mais à partir du package, spécifiez-le comme `` pack1.TestJava```. Il ne peut pas être exécuté par la méthode spécifiée comme l'exemple d'échec.
Exemple d'échec)
# java -cp ../class/pack1 TestJava
# java -cp ../class TestJava
# java ../class/pack1/TestJava
Tout d'abord, j'ai modifié le fichier comme suit.
TestJava.java
package pack1;
class TestJava {
int i;
char c;
TestJava(){
i = 1;
c = 'A';
}
TestJava( int p_i, char p_c){
i = p_i;
c = p_c;
}
void go() {
System.out.println("GO!");
System.out.println("i =" + i + "\n" + "c = " + c );
}
public static void main(String[] args){
System.out.println("test2");
TestJava tj = new TestJava();
TestJava tj_2 = new TestJava( 2, 'B');
tj.go();
tj_2.go();
}
}
Créez votre propre instance et sortez celle préparée avec 2 modèles dans le constructeur. C'est aussi un programme de test qui produit même sa propre méthode.
J'ai créé un autre fichier.
TestJava2.java
package pack1;
class TestJava2 {
public static void main(String[] args){
System.out.println("TestJava2");
TestJava tj2 = new TestJava();
TestJava tj2_2 = new TestJava2( 2, 'B');
tj2.go();
tj2_2.go();
}
}
Il s'agit du contenu pour créer une instance à partir de la classe TestJava et l'exécuter.
Supprimez le fichier de classe qui a été créé une fois et créez-le comme suit.
# tree ../../ --charset=c
../../
|-- class
| `-- pack1
`-- src
`-- pack1
|-- TestJava.java
`-- TestJava2.java
Il existe les méthodes suivantes pour compiler ces deux fichiers.
javac -d ../../class TestJava.java TestJava2.java
2. Compilez le fichier appelant puis compilez le fichier appelant
Dans ce cas, TestJava2.java utilise TestJava.java, vous devez donc également spécifier le chemin de classe.
Cliquez ici pour le résultat de l'exécution.
TestJava2 GO! i =1 c = A GO! i =2 c = B
c'est tout.
Recommended Posts