Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Por qué no se ejecuta correctamente mi pom cuando se utiliza Android Studio / IntelliJ?

Tengo una aplicación de Android que se construye con Maven. Usando el buildnumber-maven-plugin y maven-resources-plugin, inserto la versión del proyecto maven y el git commit hash en el AndroidManifest. La meta de creación de buildnumber-maven-plugin se ejecuta en la fase de validate y la meta de recursos del complemento maven-resources se ejecuta en la fase de initialize .

Cuando se construye a través de la línea de comandos (con mvn install ) todo funciona bien y el número de compilación aparece correctamente en el manifiesto producido.

  • ¿Cómo puedo hacer que una celda en un ListView en Android se expanda y contraiga verticalmente cuando se toca?
  • Navegador predeterminado de Android que no se desplaza en la página web
  • Gradle se queda atascado en 'build' o 'assembleDebug' al usar la versión de 64 bits o 32 bits de Android Studio
  • Cómo actualizar el número de notificación
  • Integración de Flurry en la misma aplicación en Android e iOS
  • El cruce se bloquea con AssertionFailedError
  • Sin embargo, cuando se construye a través de Android Studio o IntelliJ, el git commit hash no está presente (la propiedad Maven no se reemplaza con el valor real) en el manifiesto, pero la versión del proyecto maven es.

    ¿Por qué?

    FYI: Android Studio ejecuta los recursos de proceso de la fase Maven antes de Make, por lo que debería funcionar.

    En la línea de comandos estoy usando Maven 3.0.3, por lo que podría ser un problema de versión (aunque no puedo averiguar qué versión utiliza IntelliJ).

    Aquí está el elemento de construcción de mi POM:

     <build> <sourceDirectory>src</sourceDirectory> <testSourceDirectory>test</testSourceDirectory> <resources> <resource> <directory>${project.basedir}</directory> <filtering>true</filtering> <targetPath>${project.build.directory}/filtered-manifest</targetPath> <includes> <include>AndroidManifest.xml</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>${maven.buildnumber.version}</version> <configuration> <doCheck>false</doCheck> <doUpdate>false</doUpdate> <shortRevisionLength>6</shortRevisionLength> <revisionOnScmFailure>000000</revisionOnScmFailure> </configuration> <executions> <execution> <phase>validate</phase> <goals> <goal>create</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>${maven.resources.version}</version> <executions> <execution> <phase>initialize</phase> <goals> <goal>resources</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <extensions>true</extensions> <configuration> <androidManifestFile>${project.build.directory}/filtered-manifest/AndroidManifest.xml</androidManifestFile> </configuration> </plugin> </plugins> </build> 

    Y el nombre de versión en mi archivo AndroidManifest es:

     <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.somecompany" android:versionCode="1" android:versionName="${project.version}-${buildNumber}" > 

    Desde la línea de comandos tanto $ {project.version} como $ {buildNumber} se rellenan correctamente con sus valores, desde IntelliJ $ {buildNumber} no lo es y sólo aparece como "$ {buildNumber}": esto indicaría (ya que he establecido revisionOnScmFailure ) Que el complemento no se ejecuta en absoluto.

    He intentado cambiar el objetivo de create para ejecutar en la fase de initialize (en caso de que IntelliJ saltaba a validate ), pero eso no hizo ninguna diferencia.

  • Invocación de método highlighed error en Android Studio
  • ¿Puedo llamar a stopSelf () en Service.onStartCommand?
  • ¿Cómo puedo detectar un clic en un oyente onTouch?
  • Solicitud de contraseña en android
  • ¿Cuánto apoyo hay para -webkit-overflow-scrolling: touch
  • Gravedad y layout_gravity en Android
  • One Solution collect form web for “¿Por qué no se ejecuta correctamente mi pom cuando se utiliza Android Studio / IntelliJ?”

    IntelliJ tiene su propio sistema interno de construcción como cualquier otro IDE y es capaz de construir proyectos sin la ayuda de herramientas externas. Intellij también se integra con Maven interpretando el pom.xml de su proyecto e insertándolo para construir basado en la configuración que ha definido. Esto funciona bastante bien con la mayoría de las tareas de compilación, pero comienza a caer cuando se traen complementos más complejos, como el buildnumber-maven-plugin. Desafortunadamente IntelliJ no tiene equivalente interno para manejar este complemento así que la propiedad $ {buildNumber} nunca se rellena.

    Las soluciones posibles son:

    1. No construya su proyecto con el sistema integrado de IntelliJ, utilice el panel "Proyectos de Maven" que puede mostrar al ir a "Ver"> "Ventanas de herramientas"> "Proyectos de Maven". Esto le da acceso a todas las fases estándar de Maven y otras características.

    2. En su "configuración de ejecución" de IntelliJ, agregue una variable de entorno llamada "buildNumber" y déle el valor que desee, por ejemplo: buildNumber = DEV. Esto hará que la propiedad buildNumber esté disponible durante el proceso de construcción y rellene la propiedad, sin embargo, no se actualizará desde su SCM.

    Utilizamos la primera solución en un proyecto maven de módulos múltiples, ya que también hemos alcanzado limitaciones similares con el buildnumber-maven-plugin. También usamos la solución 2 cuando necesitamos ejecutar una prueba de integración en IntelliJ ya que la propiedad buildNumber es requerida por nuestro código para mostrar la información de la versión, siempre y cuando le demos algún valor que sea feliz.

    Espero que esto sea algo útil para usted, la única solución real sería que el sistema de compilación interno de IntelliJ tenga alguna comprensión del buildnumber-maven-plugin y exponga las propiedades correctas al entorno durante el proceso de compilación.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.