tutorial studio programacion móviles listas introduccion funciones español desarrollo curso comentarios aplicaciones java scala maven servlets scala-collections

studio - Integración de Scala en un proyecto existente en Java



manual de programacion android pdf (4)

Tenemos un proyecto escrito en Java. Es un proyecto experto, que tiene páginas jsp y un montón de código java:

  • Servlets para manejar las solicitudes de los usuarios y repartir las respuestas.
  • Clases de lógica utilizadas por los servlets para procesar la lógica requerida.
  • clases de generadores de SQL utilizados para conectarse a la base de datos y realizar las consultas específicas requeridas por la lógica.

Bueno, estamos mirando hacia Scala. Por ejemplo, usamos mapeadores para obtener una colección de entidades de la base de datos y después de eso transformamos esta colección, la filtramos y regresamos al servlet. Eso parece algo bueno para hacer en Java. La pregunta es: ¿cómo puedo integrar eso en un proyecto existente? ¿Puedo usar en mis archivos de lógica escritos en Java algunas clases de Scala que nuevamente usan los archivos de mapeo escritos en Java?


Esto: http://scala-tools.org/mvnsites/maven-scala-plugin parece una buena manera de integrar su código Scala en su versión Maven, aunque no lo he probado. (Utilizo SBT, que hace muy bien la integración de Scala / Java, así como la creación de proyectos IDE (Idea y Eclipse) a través de complementos. Sin embargo, no querría cambiar todo el proceso de compilación).


Sí, puede tener dependencias mutuas entre Java y Scala sin problemas.


Trabajo en un proyecto mixto de Java / Scala en este momento (anteriormente un proyecto solo para Java). Recuerde, no hay diferencia en lo que respecta a la JVM entre un archivo .class generado desde javac y uno generado desde scalac.

Por ejemplo: Implemento interfaces Java y extiendo clases Java en Scala sin problemas. También ejemplifico Java Beans y ''Scala'' spring beans juntos en el mismo archivo de definición (con Scala Beans que dependen de Java Java y viceversa), y Java y Scala coexisten juntos en un canal de mensajes de integración Spring.

Los dos idiomas interactúan bastante bien, aunque en lo que concierne a las colecciones, probablemente querrá echar un vistazo a los objetos JavaConversions y JavaConverters Scala.

Para la construcción, usamos Ant (personalmente preferiría SBT para un nuevo proyecto, pero si se trata de un proyecto Java preexistente que usa ant, es probable que haya más problemas de los que vale la pena cambiar los sistemas de construcción). Para configurar ant para compilar archivos scala, mira esta pregunta .


Veo que nadie ha mencionado el scala-maven-plugin David Bernard , anteriormente el scala-maven-plugin maven-scala, mencionado en la respuesta de @ richard-close. No tengo mucha experiencia con él, pero he tenido un éxito inmediato con dos proyectos Java (uno bastante grande y otro pequeño), así que pensé que valía la pena publicar esto aquí, aunque la pregunta está un poco anticuada ahora, ya que Llegué a esta pregunta a través de Google.

La página de proyectos mixtos de Java / Scala debería poder ponerte en marcha, aunque también hay otras páginas de documentación interesantes. Solo agregue las secciones relevantes que se muestran aquí e intente compilar su proyecto. No cometa el error que cometí e intente usar otras configuraciones documentadas en otro lugar con este primero: simplemente siga estos cambios de configuración mínimos en su pom.xml de nivel superior (o lo que tenga sentido si Scala tendrá un alcance limitado en su proyecto) . Vaya here para obtener un texto más fácil de copiar y pegar (no hay ''+'' mostrando adiciones).

<dependencies> + <dependency> + <groupId>org.scala-lang</groupId> + <artifactId>scala-library</artifactId> + <version>2.11.7</version> + </dependency> </dependencies> <build> <pluginManagement> <plugins> + <plugin> + <groupId>net.alchim31.maven</groupId> + <artifactId>scala-maven-plugin</artifactId> + <version>3.2.1</version> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>2.0.2</version> + </plugin> </plugins> </pluginManagement> <plugins> + <plugin> + <groupId>net.alchim31.maven</groupId> + <artifactId>scala-maven-plugin</artifactId> + <executions> + <execution> + <id>scala-compile-first</id> + <phase>process-resources</phase> + <goals> + <goal>add-source</goal> + <goal>compile</goal> + </goals> + </execution> + <execution> + <id>scala-test-compile</id> + <phase>process-test-resources</phase> + <goals> + <goal>testCompile</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <executions> + <execution> + <phase>compile</phase> + <goals> + <goal>compile</goal> + </goals> + </execution> + </executions> + </plugin> </plugins> </build>

Asegúrese de usar una versión actualizada de Scala arriba si está usando Java 8 (es decir, Scala 2.11.x); Algunos de los documentos oficiales pueden ser ligeramente oudados.

Una cosa que noté es que los documentos dicen que debes hacer pero que aparentemente no es necesario hacerlo: no necesitas tener tus fuentes de Scala en un directorio separado, y posiblemente puedas dejarlas en el directorio java existente de tu proyecto. Esto es conveniente y parece funcionar, pero no sé si hay efectos secundarios.

Notas de IntelliJ

Si está utilizando IntelliJ, no olvide hacer clic con el botón derecho en el módulo de Maven en la vista de su proyecto y ''Agregar soporte de marco ...'' para agregar el marco de Scala al proyecto. Es probable que deba agregar el marco a cada submódulo en el que pretende usar Scala si está usando un proyecto de múltiples módulos, no solo el módulo de nivel superior. Luego, debería poder autoconvertir archivos Java a archivos Scala, a los que se puede acceder a través del menú Refactor (aunque tendrá que esperar algunas correcciones manuales). Esto le puede dar una forma rápida de probar la configuración, especialmente si hay alguna clase de Java que pueda probar primero.

Advertencias

Los comentarios de @ james-adam sobre JavaConversions también son muy importantes a tener en cuenta. Un problema que me di cuenta al intentar integrar Scala con otro lenguaje JVM (Kotlin) en un solo proyecto, es que las cosas pueden no ser tan fáciles debido a cómo cada idioma maneja las colecciones: ambos están diseñados para funcionar bien con Java, pero no necesariamente entre sí. No conozco los detalles, pero esto es un poco tangencial a la pregunta de todos modos.