2009-12-10 6 views
0

Je veux construire un "toJavaCode()" sur mon modèle qui générerait le code source Java requis pour générer ce modèle (sans parler des raisons ou si cela devrait ou ne devrait pas être fait , ni les problèmes de compatibilité qui peuvent survenir).test du code Java généré pendant un autre test

Je ne sais pas comment tester cela. J'utilise maven, mais les sources de génération ne fonctionneront pas vraiment pour moi puisque mon serveur doit être en place pour des tests en vrac appropriés. J'obtiens le serveur pendant l'objectif "test", mais generate-sources est trop tôt. D'autre part, même si je peux utiliser le compilateur intégré (à partir de tools.jar dans le JDK) pour ce faire, je ne sais pas comment je peux l'empaqueter dans le pot pour tester (ou charger ce pot).

Des idées?

+0

Vous ne savez pas si c'est clair - vous voulez ajouter une méthode à une classe qui génère le code nécessaire pour créer cette classe? –

+0

l'objet, pas la classe. J'aurais une classe "MyDef" avec la méthode "static String toJavaCode (MyDef myDef)" qui, lorsqu'elle est invoquée sur une instance, génère le code java nécessaire pour recréer cette instance. –

Répondre

1

Vous pouvez utiliser le JavaCompiler API pour compiler vos fichiers source et configurer un classloader à chargez les classes compilées dans votre test (sample code). tools.jar doit être sur le classpath. C'est le cas si le JDK est utilisé.

Si votre code généré est stable pour une classe donnée, vous pouvez utiliser annotation processor pour générer le code source et le compiler dans la même exécution javac que la classe annotée.

+0

compiler directement à la mémoire? Je n'y ai pas pensé. –

+0

Il compile dans le répertoire temporaire qui peut faire partie de votre chemin de classe. –

+0

J'ai ajouté un lien vers un exemple de code. –

0

Vous pouvez ajouter des tâches ant à votre client. C'est un moyen de faire quelque chose de «hors-classique» pendant une construction maven. Comme ajouter une tâche de fourmi de javac au but de test de mavens ou à peu près.

(désolé, je suis aussi confus que votre mat commentor b - mais les tâches de fourmi embarquées sont votre couteau suisse ici.)