IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[Conception][Précompilateur] existe-t-il un précompilateur pour java ?


Sujet :

Java

  1. #1
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut [Conception][Précompilateur] existe-t-il un précompilateur pour java ?
    Bonjour,
    J'ai une application java ayant des différence majeur entre différents clients. J'aurais voulu, suivant quelques paramètres passé à la compilation, 'commenter' ou non certains appelle de méthodes. J'imagine que celà devrait se faire via un précompilateur.
    Existe-t-il de telle solution pour java ?

    merci

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Pourquoi précompiler ? tu peux le faire en runtime en gérant un fichier de configuration.

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il n'existe pas de précompilateur pour Java.

    Par contre tu peux utiliser des conditions avec des constantes, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public final Class Condition {
    	public static final boolean DO_SOMETHING = false;
    }
    Puis dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (Condition.DO_SOMETHING) {
    	doSomething();
    }
    Si DO_SOMETHING est false, alors le bloc if sera supprimé à la compilation avec javac.


    Attention toutefois, car chaque modification de la classe Condition devra être suivi d'une recompilation de toutes les classes qui l'utilise...



    Si tu veux pouvoir modifier la classe Condition indépendamment de tes autres classes, il faut utiliser des champs static final de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public final Class Condition {
    	public static final boolean DO_SOMETHING; // Pas d'initialisation
     
    	static {
    		// Initialisation dans un bloc statique
    		DO_SOMETHING = false;
    	}
    }
    Dans ce cas le bloc if ne sera pas supprimé à la compilation avec javac, mais lors de l'exécution de ta machine virtuelle...

    L'avantage c'est que tes classes dépendent dynamiquement des valeurs de ta classes Conditions, ce qui fait que tu peux changer les valeurs de cette dernière sans avoir à tout recompiler...


    a++

  4. #4
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut
    merci, mais cette méthode ne me permet pas de modifier la valeur de DO_SOMETHING en passant un paramètre à la compilation. En fait je voudrais automatiser mon processus de génération des application avaec un truc du genre :

    compile -DDO_SOMETHING=True
    et toutes les occurences de DO_SOMETHING se mettraient à True. Je ne voudrais pas à avoir à remodifier le code à chaque fois que je recompile.
    Je ne peux passer non plus par des options (java -DDO_SOMETHING=True mon.appli) de lancement pour activer ou désactiver certaines parties du code. Il y a certaines partie qui concerne la sécurité d'utilisation de l'application qui ne doit pas être optionnelle chez certains clients.

  5. #5
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Et la marmotte...

    Pour ce que tu veux faire tu n'as pas le choix. Soit tu fais un fichier de config pour paramétrer les DO_SOMETHING à true ou false (mais ça revient quasi au même que les passer en paramètre de bin/java) ou faire comme a proposé judicieusement adiGuba avec recompilation à chaque fois.

  6. #6
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut
    Je me doute que je dois recompiler mais j'espérait qu'il y aurait une solution pour ne pas remodifier le code à chaque fois

  7. #7
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par narmataru
    j'espérait qu'il y aurait une solution pour ne pas remodifier le code à chaque fois
    Bah modifier une seule classe c'est pas trop lourd... Et le fichier de conf ça évite de modifier le code. A toi de voir.
    Un fichier de conf placé dans un jar c'est pas trop méchant niveau sécurité, ça dépend tes besoins.

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par narmataru
    Je me doute que je dois recompiler mais j'espérait qu'il y aurait une solution pour ne pas remodifier le code à chaque fois
    Tu peux regénérer la classe "Contition" avant chaque compilation...

    Ou mieux tu te crée des classes Condition pour chaque client, et avant la compilation tu remplaces le code source par celui qui correspond à ton client...

    a++

  9. #9
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut
    oui mais ça reste de la bidouille maisbon si y'a pas, y'a pas (peut être que xdoclet mais se serait sortir l'artillerie lourde pour pas grand chose )

  10. #10
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par narmataru
    oui mais ça reste de la bidouille maisbon si y'a pas, y'a pas (peut être que xdoclet mais se serait sortir l'artillerie lourde pour pas grand chose )
    Avec Java 5.0 tu pourrais utiliser APT pour cela, mais je ne te le conseille pas trop car son API n'est pas officiel et qu'elle a été remanié pour Java 6 (où elle sera complètement intégré à l'API standard).


    Autre solution :

    Si tu n'utilises que des constantes (static final avec un type primitifs ou une chaine "" déclaré sur une seule ligne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    package configuration;
     
    public final Class Condition {
       public static final boolean DO_SOMETHING = false;
    }
    Après la compilation il n'y a plus aucune référence à la classe, que tu n'est donc plus obligé de livrer. Tu peux donc très bien t'en servir juste à la compilation.

    Par exemple avec une arborescence comme celle là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    src
    	+ tes fichiers sources
    config
    	+ client1
    		+ configuration
    			+ Condition.java
    	+ client2
    		+ configuration
    			+ Condition.java
    Il te suffit ensuite de placer le répertoire de chaque client dans le classpath à la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javac -sourcepath src -classpath config/client1 ...

    Par contre ta classe Condition ne doit comporter que des constantes...

    a++

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2002
    Messages : 125
    Par défaut
    tu n'as qu'a utiliser ant pour :
    1) modifier la valeur de ta variable dans tes .java
    2) recompiler les java
    ...

  12. #12
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut
    merci pour ces 2 dernières solutions

  13. #13
    Membre Expert
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Par défaut
    Annotations + APT?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. existe-il un VisualStudio-Like (EDI-RAD) pour Python ?
    Par Ekimasu dans le forum EDI/RAD
    Réponses: 7
    Dernier message: 22/04/2008, 13h25
  2. Réponses: 4
    Dernier message: 16/01/2007, 15h27
  3. Réponses: 1
    Dernier message: 01/09/2006, 00h18
  4. Réponses: 3
    Dernier message: 18/12/2005, 18h49
  5. [Système] Existe-t-il un bon parser HTML pour PHP ?
    Par MiJack dans le forum Langage
    Réponses: 8
    Dernier message: 25/10/2005, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo