En C #, nous avons 2 modes pour construire des projets: Debug
et Release
, je me demande si Java a la même chose. J'utilise IntelliJ IDEA as Java IDE et jusqu'à présent, je n'ai vu nulle part pour configurer un mode de construction comme dans VS IDE).
javac
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
Vous pouvez choisir d'inclure des symboles de débogage dans les classes compilées (c'est la valeur par défaut) ou de ne pas le faire. Il n'y a pas beaucoup d'avantages à ne pas le faire. Les fichiers jar seront n peu plus petits , mais les performances sont minimes (le cas échéant). Sans ces symboles, vous n'obtenez plus de numéros de ligne dans les traces de pile. Vous avez également la possibilité d'inclure symboles supplémentaires avec des noms de variables locaux (par défaut, il n'y a que les noms de fichiers source et les numéros de ligne).
Java
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
enable assertions
Vous pouvez également activer les assertions au moment de l'exécution (la valeur par défaut est désactivée), ce qui est parfois utile lors du développement et des tests. Cela a un impact sur les performances (si le code en question a effectivement utilisé des assertions, ce qui, je pense, est peu commun ).
Quel que soit l'un de ces paramètres, la JVM vous permet toujours de connecter un débogueur.
Ce que Java n'a pas, c'est une compilation conditionnelle où du code complètement différent serait compilé en fonction d'un paramètre externe. Le plus proche que vous pouvez obtenir est quelque chose comme public static final boolean DEBUG_BUILD = true;
quelque part dans votre code et utilisez-le dans les instructions if. En fait, le compilateur exclura le code qui devient inaccessible, mais vous devez définir cette constante dans le code source.
C'est une pratique normale en Java pour tout publier est une manière qui peut être déboguée. Pour certains projets nécessitant de l'obscurcissement, ils pourraient avoir une version de construction, mais je n'ai jamais vu cela en 12 ans de développement Java.
Des éléments tels que les assertions et les messages de débogage sont généralement désactivés au moment de l'exécution pour une instance de production, mais peuvent être activés à tout moment (même dynamiquement) si nécessaire.
À mon humble avis, il est préférable d'utiliser la même version dans chaque environnement, pas seulement la même source mais les mêmes fichiers JAR. Cela vous donne la meilleure chance que, si cela fonctionne en test, il fonctionnera en production et si vous avez un problème en production, vous pouvez le reproduire en test.
Autant de choses Java est écrit de cette façon, le JIT est très bon pour optimiser le code mort qui n'est jamais appelé. À tel point que mon humble avis la plupart des micro- "benchmarks" où Java out exécute C++, c'est lorsque le benchmark ne fait rien et que le JIT est meilleur pour le détecter. À mon humble avis, C++ suppose que le développeur est assez intelligent pour ne pas écrire de code qui ne fait rien.
Vous demandez différents types de builds à compiler en différentes choses, je suppose. Par exemple, pour avoir Debug.WriteLine et Console.WriteLine.
"Non, Java n'a pas de correspondance exacte pour cette fonctionnalité. Vous pouvez utiliser des aspects ou utiliser un conteneur IOC pour injecter différentes classes d'implémentation." a volé cela à la question suivante: Conditionnel Java compilation
(il y a d'autres bonnes réponses pour vous là-bas)