{"id":407303,"date":"2023-11-21T04:52:11","date_gmt":"2023-11-21T03:52:11","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=blog&#038;p=407303"},"modified":"2023-11-21T04:52:15","modified_gmt":"2023-11-21T03:52:15","slug":"amper-una-mejor-experiencia-de-usuario-en-las-herramientas-de-compilacion","status":"publish","type":"blog","link":"https:\/\/blog.jetbrains.com\/es\/blog\/2023\/11\/21\/amper-una-mejor-experiencia-de-usuario-en-las-herramientas-de-compilacion\/","title":{"rendered":"Amper: una mejor experiencia de usuario en las herramientas de compilaci\u00f3n\u00a0"},"content":{"rendered":"<p>Una de las observaciones m\u00e1s frecuentes de la gente que adopta Kotlin es que la manipulaci\u00f3n de los sistemas de compilaci\u00f3n resulta dif\u00edcil. Aunque muchos proyectos utilizan asistentes para configurar entornos de modo que est\u00e9n listos para que los desarrolladores empiecen, tambi\u00e9n es necesario mantener estos asistentes. Los nuevos m\u00f3dulos, plataformas, dependencias y otros cambios hacen que los desarrolladores a menudo pasen m\u00e1s tiempo luchando contra el sistema de compilaci\u00f3n y el IDE que centr\u00e1ndose en el propio trabajo. Como Kotlin se est\u00e1 convirtiendo en un lenguaje verdaderamente multiplataforma, este problema se acent\u00faa a\u00fan m\u00e1s en las personas que entran por primera vez en el ecosistema JVM.<\/p>\n<p>Desde hace alg\u00fan tiempo, hemos estado trabajando en una serie de experimentos internamente en JetBrains para tratar de ver c\u00f3mo podr\u00edamos mejorar esta experiencia para los desarrolladores, no solo desde la perspectiva de definir proyectos, sino tambi\u00e9n para mejorar la compatibilidad con las herramientas. Estos esfuerzos est\u00e1n en l\u00ednea con las <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2023\/11\/kotlin-multiplatform-tooling-in-fleet\/\" target=\"_blank\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/kotlin\/2023\/11\/kotlin-multiplatform-tooling-in-fleet\/\" rel=\"noreferrer noopener\">otras iniciativas<\/a> en las que estamos trabajando para <a href=\"https:\/\/www.jetbrains.com\/kotlin-multiplatform\/\" target=\"_blank\" rel=\"noreferrer noopener\">Kotlin Multiplatform<\/a>.<\/p>\n<p>Hoy tenemos el placer de anunciar p\u00fablicamente uno de esos proyectos: Amper. Antes de continuar, sin embargo, queremos hacer una advertencia: a\u00fan es muy experimental y nuestro objetivo principal al abrirlo es validar las ideas detr\u00e1s de \u00e9l y recibir sus comentarios.<\/p>\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 es Amper?<\/h2>\n<p>Amper es una herramienta para la configuraci\u00f3n de proyectos. Su objetivo es mejorar la experiencia del usuario en la configuraci\u00f3n de proyectos y la facilidad de uso de las herramientas, es decir, la compatibilidad dentro del IDE, al tiempo que proporciona una experiencia inicial sencilla.\u00a0<\/p>\n<p>Actualmente, estamos evaluando varios aspectos, lo que incluye la configuraci\u00f3n de proyectos con el prop\u00f3sito de compilar, empaquetar, publicar y m\u00e1s. No obstante, en esta etapa el principal objetivo es la configuraci\u00f3n de proyectos con el fin de compilar.<\/p>\n<p>Aunque el caso de uso actual es Kotlin y Kotlin Multiplatform, Amper tambi\u00e9n es compatible con Java y Swift (como un requisito para multiplataforma). Sin embargo, el mismo enfoque de configuraci\u00f3n podr\u00eda funcionar para otros lenguajes y pilas tecnol\u00f3gicas en el futuro.\u00a0<\/p>\n<p>Amper se implementa como un complemento de Gradle y utiliza YAML como formato de configuraci\u00f3n de proyectos. El objetivo ahora es validar la experiencia del usuario, raz\u00f3n por la cual hemos optado por construir sobre una herramienta de compilaci\u00f3n bien probada como Gradle, proporcionando una capa de configuraci\u00f3n sobre ella.<\/p>\n<p>En cuanto al uso de YAML, algunos de ustedes se preguntar\u00e1n, \u00bfpor qu\u00e9 no Kotlin? Aunque la decisi\u00f3n sobre este lenguaje de marcado no es definitiva, queremos adoptar un enfoque declarativo. Creemos que esto no solo permite una configuraci\u00f3n m\u00e1s simplificada que es menos propensa a errores, sino que tambi\u00e9n nos ayuda en t\u00e9rminos de proporcionar herramientas m\u00e1s efectivas. Y, de nuevo, con el objetivo de compartir este experimento con ustedes y validar las ideas detr\u00e1s de \u00e9l, hemos tomado el enfoque m\u00e1s sencillo. Todav\u00eda no se ha decidido si terminaremos con un subconjunto restrictivo de Kotlin como el lenguaje de frontend. Por ahora, nuestro enfoque es validar nuestras ideas.\u00a0<\/p>\n<h2 class=\"wp-block-heading\">\u00a1Mu\u00e9streme el c\u00f3digo!<\/h2>\n<p>Tomemos un proyecto de JVM muy b\u00e1sico de \u00abHello, World!\u00bb con la siguiente estructura de directorios en IntelliJ IDEA 2023.3:<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" width=\"822\" height=\"573\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/11\/ij-jvm-structure.png\" alt=\"\" class=\"wp-image-404254\" style=\"width:411px\" \/><\/figure>\n<p>Los archivos <code>main.kt<\/code> y <code>MyTest.kt<\/code> son simplemente archivos de Kotlin normales que no contienen nada especial. La parte interesante es <code>module.yaml<\/code>, que es el archivo de manifiesto de Amper. Para la estructura del proyecto anterior, simplemente ser\u00eda:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Produce a JVM application \nproduct: jvm\/app<\/pre>\n<p>\u00a1Y ya est\u00e1! Las cadenas de herramientas de Kotlin y Java, el marco de trabajo de pruebas y otras funcionalidades necesarias est\u00e1n configuradas y disponibles directamente desde el principio. \u00a1Puede crear una compilaci\u00f3n, ejecutarla, escribir y ejecutar pruebas y m\u00e1s! Para obtener m\u00e1s informaci\u00f3n detallada, eche un vistazo al <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/main\/examples\/jvm-with-tests\" target=\"_blank\" rel=\"noreferrer noopener\">ejemplo completo<\/a>.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2472\" height=\"1718\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/11\/ij-jvm-result-1.png\" alt=\"\" class=\"wp-image-404299\" \/><\/figure>\n<p>Ahora, veamos un proyecto de Compose Multiplatform con las aplicaciones de JVM para Android, iOS y escritorio, con la siguiente estructura de proyectos en Fleet:<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" width=\"980\" height=\"1130\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/11\/fleet-kmp-structure.png\" alt=\"\" class=\"wp-image-404277\" style=\"width:460px\" \/><\/figure>\n<p>F\u00edjese c\u00f3mo la carpeta <code>src\/<\/code> contiene c\u00f3digo tanto en Kotlin como en Swift. Por supuesto, tambi\u00e9n podr\u00eda ser Kotlin y Java.<\/p>\n<p>Otro aspecto destacable es el m\u00f3dulo compartido con el c\u00f3digo com\u00fan en la carpeta <code>src<\/code> y las carpetas espec\u00edficas de la plataforma <code>src@ios<\/code> y <code>src@android<\/code> (obtenga m\u00e1s informaci\u00f3n sobre las <a href=\"http:\/\/github.com\/JetBrains\/amper\/tree\/main\/docs\/Documentation.md#project-layout\" target=\"_blank\" data-type=\"link\" data-id=\"github.com\/JetBrains\/amper\/tree\/main\/docs\/Documentation.md#project-layout\" rel=\"noreferrer noopener\">disposiciones de proyectos<\/a>).<\/p>\n<p>As\u00ed es como se ve el archivo de manifiesto <code>ios-app\/module.yaml<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-theme=\"wpcustom\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Produce an iOS application\nproduct: ios\/app\n\n# Depend on the shared library module: \ndependencies:\n  - ..\/shared\n\nsettings:\n  # Enable Compose Multiplatform framework\n  compose: enabled<\/pre>\n<p>Esto es bastante directo: define una aplicaci\u00f3n de iOS con una dependencia en un m\u00f3dulo compartido y habilita el marco de trabajo de Compose Multiplatform. Un ejemplo m\u00e1s interesante ser\u00eda <code>shared\/module.yaml<\/code>: <\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-theme=\"wpcustom\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Produce a shared library for the JVM, Android, and iOS platforms:\nproduct:\n  type: lib\n  platforms: [jvm, android, iosArm64, iosSimulatorArm64, iosX64]\n\n# Shared Compose dependencies:\ndependencies:\n  - org.jetbrains.compose.foundation:foundation:1.5.0-rc01: exported\n  - org.jetbrains.compose.material3:material3:1.5.0-rc01: exported\n\n# Android-only dependencies  \ndependencies@android:\n  # integration compose with activities\n  - androidx.activity:activity-compose:1.7.2: exported\n  - androidx.appcompat:appcompat:1.6.1: exported\n\n# iOS-only dependencies with a dependency on a CocoaPod\n#   note that CocoaPods dependencies are not yet implemented in the prototype\ndependencies@ios:\n  - pod: 'FirebaseCore'\n    version: '~&gt; 6.6'\n\nsettings:\n  # Enable Kotlin serialization\n  kotlin:\n    serialization: json\n  \n  # Enable Compose Multiplatform framework\n  compose: enabled<\/pre>\n<p>Merece la pena mencionar un par de cosas. En primer lugar, observe las <code>dependencias<\/code> espec\u00edficas de la plataforma: las secciones con el calificador <code>@<\/code>. <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/main\/docs\/Documentation.md#platform-qualifier\" target=\"_blank\" rel=\"noreferrer noopener\">El calificador de plataforma<\/a> se puede utilizar tanto en el manifiesto como en la disposici\u00f3n de archivos. El calificador organiza el c\u00f3digo, las dependencias y la configuraci\u00f3n para una plataforma espec\u00edfica. <br \/>En segundo lugar, la secci\u00f3n <code>dependencies:<\/code> permite no solo dependencias de Kotlin y Maven, sino potencialmente tambi\u00e9n <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/main\/docs\/Documentation.md#native-dependencies\" target=\"_blank\" rel=\"noreferrer noopener\">gestores de paquetes espec\u00edficos de la plataforma<\/a>, como CocoaPods, Swift Package Manager y otros sobre la base de los comentarios recibidos.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2756\" height=\"1744\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/11\/fleet-kmp-result.png\" alt=\"\" class=\"wp-image-404288\" style=\"object-fit:cover\" \/><\/figure>\n<p>Naturalmente, estos ejemplos solo muestran un conjunto limitado de las funcionalidades de Amper. Eche un vistazo al <a href=\"https:\/\/github.com\/JetBrains\/amper\" target=\"_blank\" rel=\"noreferrer noopener\">proyecto en GitHub<\/a> y consulte la <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/main\/docs\/Documentation.md\" target=\"_blank\" data-type=\"link\" data-id=\"https:\/\/github.com\/JetBrains\/amper\/tree\/main\/docs\/Documentation.md\" rel=\"noreferrer noopener\">documentaci\u00f3n<\/a>, el <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/main\/docs\/Tutorial.md\" target=\"_blank\" rel=\"noreferrer noopener\">tutorial<\/a> y los <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/main\/examples\" target=\"_blank\" rel=\"noreferrer noopener\">proyectos de ejemplo<\/a> para obtener m\u00e1s informaci\u00f3n sobre el dise\u00f1o y la funcionalidad de Amper.<\/p>\n<h3 class=\"wp-block-heading\">Qu\u00e9 permite actualmente<\/h3>\n<p>Actualmente, Amper permite crear aplicaciones dirigidas a las plataformas JVM, Android, iOS, macOS y Linux. Puede crear aplicaciones basadas tanto en Kotlin (de plataforma \u00fanica y multiplataforma) como en Java.<\/p>\n<p>Dado que Amper utiliza Gradle como backend, la compatibilidad con tareas personalizadas, la posibilidad de publicar bibliotecas en Maven, la compatibilidad con CocoaPods y la capacidad de empaquetar aplicaciones de escritorio se proporcionan configurando directamente los archivos de compilaci\u00f3n de Gradle.<\/p>\n<h2 class=\"wp-block-heading\">C\u00f3mo probarlo\u00a0<\/h2>\n<p>Hay varias maneras de probar Amper.<\/p>\n<ul>\n<li>En <a href=\"https:\/\/www.jetbrains.com\/idea\/nextversion\/\" target=\"_blank\" rel=\"noopener\">IntelliJ IDEA<\/a> 2023.3, a partir de la versi\u00f3n 233.11799, para proyectos JVM y Android.<\/li>\n<li>En <a href=\"https:\/\/www.jetbrains.com\/fleet\/download\" target=\"_blank\" rel=\"noopener\">Fleet<\/a>, a partir de la versi\u00f3n 1.26.104, para los proyectos JVM, Android y Kotlin Multiplatform.<\/li>\n<li>Utilizando Gradle para compilar proyectos de Amper desde la CLI o CI\/CD.<\/li>\n<\/ul>\n<p>Consulte las <a href=\"https:\/\/github.com\/JetBrains\/amper\/blob\/main\/docs\/Setup.md\" target=\"_blank\" rel=\"noopener\">instrucciones de configuraci\u00f3n<\/a>.<\/p>\n<p>Hemos preparado algunos <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/main\/examples\" target=\"_blank\" rel=\"noopener\">ejemplos<\/a>, as\u00ed como un <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/main\/docs\/Tutorial.md\" target=\"_blank\" rel=\"noopener\">tutorial<\/a>. Adem\u00e1s, puede encontrar <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/main\/docs\/Documentation.md\" target=\"_blank\" rel=\"noopener\">documentaci\u00f3n<\/a> m\u00e1s detallada que abarca diferentes aspectos de Amper.<\/p>\n<h3 class=\"wp-block-heading\">Necesitamos sus comentarios<\/h3>\n<p>El proyecto se encuentra en una etapa en la que necesitamos desesperadamente su opini\u00f3n. Nos encantar\u00eda que lo probara y nos dijera si es m\u00e1s sencillo para definir proyectos o qu\u00e9 casos de uso le gustar\u00eda que cubriera. \u00a1Cualquier comentario que pueda tener es bienvenido! No dude en enviar sus impresiones e ideas utilizando nuestro <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/AMPER\" target=\"_blank\" rel=\"noopener\">sistema de seguimiento de incidencias<\/a>, como comentarios en esta publicaci\u00f3n o uni\u00e9ndose a nuestro <a href=\"https:\/\/kotlinlang.slack.com\/archives\/C062WG3A7T8\" target=\"_blank\" rel=\"noopener\">canal p\u00fablico de Slack<\/a> y public\u00e1ndolos all\u00ed.<\/p>\n<h2 class=\"wp-block-heading\">Unas \u00faltimas palabras<\/h2>\n<p>Hemos preparado un conjunto de <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/main\/docs\/FAQ.md\" target=\"_blank\" rel=\"noopener\">preguntas frecuentes<\/a> a continuaci\u00f3n, que deber\u00eda responder algunas de las preguntas que pueda tener. Sin embargo, quer\u00edamos abordar de forma expl\u00edcita algunos puntos.<\/p>\n<p>En primer lugar, nos comprometemos a respaldar tecnolog\u00edas como Maven y Gradle en IntelliJ IDEA y Fleet. Este proyecto no cambia nuestro compromiso con estas tecnolog\u00edas y continuamos trabajando muy de cerca con nuestros socios en este frente.<\/p>\n<p>En segundo lugar, en esta etapa Amper no es una herramienta de compilaci\u00f3n independiente. Aunque tenemos muchas ideas sobro c\u00f3mo nos gustar\u00eda avanzar con el producto, tambi\u00e9n necesitamos validar las cosas en las que estamos trabajando antes de desarrollar Amper a\u00fan m\u00e1s.\u00a0<\/p>\n<p>Esperamos que otras preguntas le sean respondidas en las <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/main\/docs\/FAQ.md\" target=\"_blank\" rel=\"noopener\">preguntas frecuentes<\/a>. Si no, no dude en preguntarnos en los comentarios y le responderemos lo mejor que podamos.<\/p>\n\n\n<p><em>Art\u00edculo original en ingl\u00e9s de:<\/em><br><\/p>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1086,"featured_media":407324,"comment_status":"closed","ping_status":"closed","template":"","categories":[286],"tags":[],"cross-post-tag":[6910,6355],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/blog\/407303"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/comments?post=407303"}],"version-history":[{"count":6,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/blog\/407303\/revisions"}],"predecessor-version":[{"id":407336,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/blog\/407303\/revisions\/407336"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media\/407324"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media?parent=407303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/categories?post=407303"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/tags?post=407303"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/cross-post-tag?post=407303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}