如何解决Gluon 客户端 Maven 插件 - 资源过滤不适用于“client:package”
我正在开发一个 javafx 11 移动项目,正在使用 Gluon 客户端插件来构建 APK。
从这个单个项目中,我们需要为不同的客户构建多个应用程序 (APK)。我已经使用 Maven 配置文件做到了这一点。
现在我正在尝试动态更新“AndroidManifest.xml”以为每个构建设置不同的包名称。我已经尝试过 Maven 资源过滤来动态更新该属性。它没有按预期工作。
下面是“AndroidManifest.xml”(在 src/android 中):
<?xml version='1.0'?>
<manifest xmlns:android='http://schemas.android.com/apk/res/android'
package='${app.package.name}'
android:versionCode='${app.version.code}'
android:versionName='${app.version.name}'>
<supports-screens android:xlargeScreens="true"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application android:label="${app.name}" android:icon="@mipmap/ic_launcher">
<activity android:name='com.gluonhq.helloandroid.MainActivity' android:configChanges="orientation|keyboardHidden">
<intent-filter>
<category android:name='android.intent.category.LAUNCHER'/>
<action android:name='android.intent.action.MAIN'/>
</intent-filter>
</activity>
<activity android:name='com.gluonhq.helloandroid.PermissionRequestActivity'/>
</application>
如上所示,package、versionCode、versionName 和 appLabel 被定义为过滤器变量。
以下是执行mvn client:build -P android命令后“target\classes”中的清单。
<?xml version='1.0'?>
<manifest xmlns:android='http://schemas.android.com/apk/res/android'
package='com.company.parent.app'
android:versionCode='1'
android:versionName='1.0'>
<supports-screens android:xlargeScreens="true"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application android:label="CB Parents" android:icon="@mipmap/ic_launcher">
<activity android:name='com.gluonhq.helloandroid.MainActivity' android:configChanges="orientation|keyboardHidden">
<intent-filter>
<category android:name='android.intent.category.LAUNCHER'/>
<action android:name='android.intent.action.MAIN'/>
</intent-filter>
</activity>
<activity android:name='com.gluonhq.helloandroid.PermissionRequestActivity'/>
</application>
下面是执行mvn client:package -P android命令后“target\client\aarch64-android\gvm\android_project\app\src\main”中的manifest。
<?xml version='1.0'?>
<manifest xmlns:android='http://schemas.android.com/apk/res/android'
package='${app.package.name}'
android:versionCode='${app.version.code}'
android:versionName='${app.version.name}'>
<supports-screens android:xlargeScreens="true"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application android:label="${app.name}" android:icon="@mipmap/ic_launcher">
<activity android:name='com.gluonhq.helloandroid.MainActivity' android:configChanges="orientation|keyboardHidden">
<intent-filter>
<category android:name='android.intent.category.LAUNCHER'/>
<action android:name='android.intent.action.MAIN'/>
</intent-filter>
</activity>
<activity android:name='com.gluonhq.helloandroid.PermissionRequestActivity'/>
</application>
由于过滤器未按预期应用,“mvn client:package -P android”任务失败。
以下是我如何在 pom.xml 中为 AndroidManifest 应用过滤。
<!-- To set AndroidManifest properties dynamically -->
<resource>
<directory>src/android</directory>
<!-- Map ${} into resources -->
<filtering>true</filtering>
<includes>
<include>AndroidManifest.xml</include>
</includes>
</resource>
为什么过滤不仅适用于 'mvn client:package' 任务,而适用于 'mvn client:build' 任务?还是我遗漏了什么?
附注。也可以通过客户端插件配置更新“appLabel”、“versionCode”和“versionName”。但我想将每个动态属性保存在一个属性文件中。而且也没有选项可以通过该插件设置“packageName”。这就是我通过资源过滤更新它们的原因。
更新 #1:这是我的 pom.xml。还没打磨。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>multi-profile-project3</groupId>
<artifactId>multi-profile-project3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<main.class>com.multiprofile.app.main.Main</main.class>
</properties>
<build>
<!-- Loading all ${} -->
<filters>
<filter>src/${env}/resources/application-${env}.properties</filter>
</filters>
<resources>
<!-- Loading fxml and css (under 'main' directory) -->
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<!-- Loading main resources -->
<resource>
<directory>src/main/resources</directory>
<!-- Map ${} into resources -->
<filtering>true</filtering>
<includes>
<include>*.properties</include>
</includes>
</resource>
<!-- Loading school specific resources based on 'env' -->
<resource>
<directory>src/${env}/resources</directory>
<excludes>
<exclude>*.properties</exclude>
</excludes>
</resource>
<!-- To set AndroidManifest properties dynamically -->
<resource>
<directory>src/android</directory>
<!-- Map ${} into resources -->
<filtering>true</filtering>
<includes>
<include>AndroidManifest.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.1</version>
<configuration>
<mainClass>${main.class}</mainClass>
</configuration>
</plugin>
<!-- Copy images from src/{env}/resources/images/android_res
to src/android/res -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>id.initresources</id>
<phase>validate</phase>
<goals>
<goal>resources</goal>
</goals>
</execution>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>src/android/res</outputDirectory>
<resources>
<resource>
<directory>src/${env}/resources/images/android_res</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${main.class}</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
<!-- To load properties from '.properties' file and use them as a property -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>id.validateprops</id>
<phase>validate</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>src/${env}/resources/application-${env}.properties</file>
</files>
</configuration>
</execution>
<execution>
<id>id.outputprops</id>
<phase>generate-resources</phase>
<goals>
<goal>write-project-properties</goal>
</goals>
<configuration>
<outputFile>${project.build.outputDirectory}/properties-from-pom.properties</outputFile>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.gluonhq</groupId>
<artifactId>client-maven-plugin</artifactId>
<version>0.1.36</version>
<configuration>
<target>${client.target}</target>
<mainClass>${main.class}</mainClass>
<reflectionList>
<list>com.multiprofile.app.login.LoginPresenter</list>
</reflectionList>
<bundlesList>
<list>application</list>
</bundlesList>
<releaseConfiguration>
</releaseConfiguration>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>school1</id>
<properties>
<env>school1</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>school2</id>
<properties>
<env>school2</env>
</properties>
</profile>
<profile>
<id>school3</id>
<properties>
<env>school3</env>
</properties>
</profile>
<!-- Profile for android build -->
<profile>
<id>android</id>
<properties>
<client.target>android</client.target>
</properties>
</profile>
<!-- Profile for ios build -->
<profile>
<id>ios</id>
<properties>
<client.target>ios</client.target>
</properties>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11.0.2</version>
</dependency>
<dependency>
<groupId>com.airhacks</groupId>
<artifactId>afterburner.fx</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
</project>
因此,有android、ios 和每所学校 的配置文件。我分别使用以下 Maven 命令构建和打包“mvn client:build -P school1,android”、“mvn client:package -P school1,android”。。 >
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。