Gluon 客户端 Maven 插件 - 资源过滤不适用于“client:package”

如何解决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>

如上所示,packageversionCodeversionNameappLabel 被定义为过滤器变量。

以下是执行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>

因此,有androidios每所学校 的配置文件。我分别使用以下 Maven 命令构建和打包“mvn client:build -P school1,android”、“mvn client:package -P school1,android”。。 >

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res