Tengo un proyecto Maven de varios módulos. Por el bien de este ejemplo, considere dos módulos:
dataconsumer
El módulo consumertiene un módulo datacomo dependencia.
El módulo datadeclara un montón de clases principales. Hay pruebas debajo src/testque los usan. Estas pruebas requieren una creación de objetos prolija, así que tengo una clase con algunos métodos de utilidad para crear estos objetos. Esta clase de utilidad ( SampleDataHelper) está en la src/testjerarquía.
También tengo algunas pruebas en el consumermódulo que necesitan crear algunos de estos objetos prolijos. Quiero usar mi SampleDataHelperclase (definida en data src/test) en las pruebas que residen en mi consumer src/testárbol. Desafortunadamente, aunque dataes una dependencia de consumer, consumerno se pueden ver las clases que existen debajo data src/test.
Para combatir esto, pensé que podría crear otro módulo ( data-test) y pasar SampleDataHelpera él debajo src/main. Luego incluiría data-testcomo alcance de prueba la dependencia de data. Desafortunadamente, esto introduce una dependencia circular: datausa data-test, pero data-testtambién requiere data.
La única solución que he llegado con es colocar SampleDataHelperbajo data src/mainbajo un testpaquete y la esperanza de que ningún código de aplicación real nunca lo llama.
¿Cómo puedo compartir mi SampleDataHelperclase entre módulos sin someterla src/main?

data) antes de que pueda incluso compilar mi segundo módulo (consumer).mvn package, pero debería funcionar bien en una compilación de un solo paso cuando usamvn installomvn deploy. Solo una nota rapida. En uno de nuestros grandes proyectos tenemos un wrapper sobre junit'sTestBasey está ubicado en elsrc/mainque tampoco considero buena idea.Respuestas:
Su proyecto de consumidor depende de su proyecto de datos, por lo tanto, nos complace que los datos deban construirse antes que el consumidor. Como resultado, utilizando las técnicas sugeridas en los comentarios , me aseguraría de que su proyecto de datos contenga todo el código de prueba que desea compartir y configurar el POM para producir un JAR de prueba:
Su proyecto de consumidor dependería entonces del artefacto JAR de datos normal, más el
test-jarartefacto adicional , con alcance de prueba, por supuesto:He utilizado este enfoque en muchas ocasiones y funciona bien.
fuente
Entonces, ¿el problema es que (algunas) pruebas en el
datamódulo dependen de laSampleDataHelperclase? Puede mover laSampleDataHelperclase asrc/maindeldata-testmódulo, si al mismo tiempo mueve las pruebas (que dependen de la clase específica) alsrc/testdeldata-testmódulo. En consecuencia, no habría más dependencias circulares.fuente
SampleDataHelperse muevan deldatamódulo o delconsumermódulo (según corresponda) adata-test. Desafortunadamente, no encuentro que esta sea una solución muy "ordenada", ya que mueve mis pruebas fuera del módulo que prueban a uno diferente. (Estrictamente hablando, solo dijiste que moviera lasdatapruebas, pero creo que me encontraría moviendo ambas por coherencia). Pero gracias por tu respuesta. :-)data-testmódulo debería depender deldatamódulo (y no al revés). Para evitar la dependencia circular, todas las pruebas que residen actualmente en eldatamódulo que usa elSampleDataHelperdeben trasladarse aldata-testmódulo.