2009-12-18 10 views
3

J'écris une application client et serveur. En ce moment je l'ai développé moi-même, donc je l'ai écrit comme un projet Eclipse, organisé en paquets Java (org.myorg.server, org.myorg.client, org.myorg.networksystem, etc.). Le projet se déploie dans un seul fichier JAR. Ensuite, le client est une applet, donc je pointe simplement l'applet code paramètre à org.myorg.client.ClientApplet à l'intérieur du fichier jar, alors que quand je lance le serveur, il s'agit d'une application en ligne de commande et je lance:Structure de projet client/serveur, structure de dossier, fichiers de construction, etc.

java jar MyJar.jar org.myorg.server.ServerApplication

Eh bien, je dois nettoyer sa structure et d'améliorer le processus de construction. Je veux également séparer les fichiers jar, de sorte qu'un utilisateur n'a pas accès à une copie du serveur intégré directement dans le fichier jar comme il est maintenant.

Je souhaite utiliser un serveur d'intégration continue tel que CruiseControl. Ce serait vraiment cool si j'avais seulement besoin de vérifier mon code dans le dépôt SVN; Ensuite, le serveur CruiseControl récupère le code, le compile et le place dans des jars séparés, puis déploie le fichier jar sur mon serveur dédié et l'exécute, puis déploie le fichier client sur mon serveur web pour que l'applet soit mise à jour.

Je peux comprendre CruiseControl. Mon problème actuel est comment séparer le code. Il est bien séparé en packages client et serveur, mais il existe également des packages partagés tels que le protocole réseau. Dois-je séparer mon projet en 3 projets pour client, serveur et commun? Devrais-je faire autre chose? Je pensais écrire des fichiers de construction Ant à la main, mais j'aimerais vraiment rester dans Eclipse. Comment puis-je organiser au mieux mon code pour atteindre ces objectifs?

(par ailleurs, désolé si cette question est source de confusion, je pense que je vais avoir du mal à mettre en mots toutes les questions différentes qui tourbillonnent autour de ma tête)

Répondre

2

Si vous savez déjà ce que semble vous avez besoin Cependant, si vous voulez que CruiseControl compile et empaquette le code, vous devrez utiliser un outil comme Ant, ou Maven, Gradle, ou un autre outil de construction, afin de faire ce que vous voulez. Même si vous avez un package d'outil de construction, le code que vous pouvez toujours utiliser Eclipse pour générer et exécuter tout. Je ne sais pas à quel point vous êtes familier avec Ant, mais l'utilisation de Ant vous donnera plus de contrôle sur le processus de construction au détriment de la nécessité de définir le processus. D'autres outils comme Maven et Gradle ont une manière prescrite de structurer le code qui réduit la quantité de configuration pour une construction, et dans le cas de Maven, je ne suis pas sûr que l'on puisse changer la façon dont il attend la mise en page du projet. D'un autre côté, Gradle peut changer ses paramètres par défaut.

En ce qui concerne l'organisation, je pense que séparer le code en client, serveur et le protocole réseau partagé par le client et le serveur, comme vous l'avez mentionné, serait bon. Je n'utilise pas Eclipse, donc je ne suis pas sûr de savoir comment cela serait fait. Vous pouvez simplement empaqueter le client et le serveur dans des fichiers JAR séparés avec les fichiers de classe du module de protocole réseau dans les deux ou simplement créer trois fichiers JAR.

+0

J'ai depuis lors regardé dans Maven, a décidé que ce n'était pas pour moi, et maintenant je suis heureux d'utiliser Ant. J'ai décidé qu'il y a si peu de code partagé que je vais simplement le copier entre les projets, donc j'ai deux projets distincts. J'ai été tellement débordé entre l'école et l'apprentissage de Ant que je n'ai pas encore réussi à les charger dans Eclipse, mais je ne prévois aucune difficulté. – Ricket

3

Vous êtes sur la bonne voie en séparant votre projet en 3 projets distincts - vous aurez besoin d'un client, d'un serveur et d'un commun.

Vous pouvez définir des dépendances entre projets sur chaque projet dans Eclipse. Si vous cliquez avec le bouton droit sur le projet, c'est dans la boîte de dialogue lancée par l'option "Configurer le chemin de génération".

Vous devriez vous pencher sur l'écriture de fichiers ANT pour gérer la construction - il sera beaucoup plus facile de se connecter ultérieurement à CruiseControl.

0

Je pense que votre question est excellente.
Je suggère de regarder dans maven. Il est spécialement conçu pour fournir un flux de travail commun, basé sur les meilleures pratiques, y compris les phases de développement, de test et de déploiement. Même si vous n'utilisez pas maven, cela peut vous donner quelques idées sur la structure des projets.
Eclipse a une excellente intégration avec ant, vous pouvez donc utiliser ant pour construire/déployer vos projets tout en restant dans Eclipse.
Je suggère définitivement de séparer votre code dans plusieurs projets Eclipse. Cela impose les dépendances correctes: vous pouvez vous assurer que votre code client peut utiliser votre code commun, et votre code serveur peut utiliser votre code commun, mais le code commun ne peut pas utiliser l'un des deux autres, et de même le serveur peut n'utilisez pas le code client.

0

Pour les projets volumineux, il est préférable d'avoir des projets Eclipse distincts pour chaque client, serveur et commun. À mon avis, ce serait exagéré, à mon avis, pour un petit projet: dans un tel cas, je le garderais comme un projet Eclipse, mais j'écrirais des cibles Ant personnalisées (toutes dans le même fichier build.xml) pour gérer l'emballage du client par rapport aux pots du serveur. Le code commun apparaîtrait simplement dans les deux pots.

Mais oui, vous devrez faire un travail manuel Ant, mais c'est une bonne compétence à avoir de toute façon.

Questions connexes