007-构建工具大进步:Amper Amper Amper!

在这里插入图片描述

Amper Amper Amper!

今天天气不好,送孩子上少年宫之后就在茶馆里坐着。突然看到一个帖子:Project configuration with Amper,看得心情大好。

用Kotlin也有个大概几年的时间,开发了几个小工具,感觉很是不错。但是配置起来确实是个大问题,gradle那一套挺好用,功能非常强大,整起来心智负担不是一般大。前面都写了几个笔记,自己用的时候还要经常去翻,配置里面的一些细节,还要去拷贝代码。而且gradle到gradle.kts,也是一个麻烦的东西。Maven用得比较少,以前读书的时候XML发一篇小文章把胃口搞坏了。Ant用过几次,Java年代,感觉不太喜欢。

看到Amper之后,立马准备试一下,终于可以现代化一次。Java社区和新的Kotlin社区,可真是慢慢都成了守旧势力。所有新的语言都提供了非常好用的项目管理、依赖管理、构建工具一体化的方案,唯独Java体系还在修修补补。终于,守旧势力被冲了,Amper出现了。

Amper是什么?

Amper是JetBrains公司开发的一个项目配置工具,用于Kotlin Multiplatform项目。它的目标是简化项目配置。这句废话……

我最关心的就是Amper可以用独立运行的方式来管理项目。

(base) PS C:\prjs\amper> ./amper --help
Usage: amper [<options>] <command> [<args>]...

Options:
  --version                                Show the version and exit
  --root=<path>                            Amper project root
  --log-level=(debug|info|warn|error|off)  Console logging level (default: INFO)
  --shared-caches-root=<path>              Path to the cache directory shared between all Amper projects (default:
                                           C:\Users\User\AppData\Local\Amper)
  --async-profiler                         Profile Amper with Async Profiler
  --build-output=<path>                    Root directory for build outputs. By default, this is the 'build' directory
                                           under the project root.
  -h, --help                               Show this message and exit

Commands:
  build                Compile and link all code in the project
  clean                Remove the project's build output and caches
  clean-shared-caches  Remove the Amper caches that are shared between projects
  init                 Initialize a new Amper project based on a template
  modules              List all modules in the project
  publish              Publish modules to a repository
  run                  Run your application
  settings             Print the effective Amper settings of each module
  task                 Execute any task from the task graph
  tasks                List all tasks in the project and their dependencies
  test                 Run tests in the project
  tool                 Run a tool
  update               Update Amper to the latest version
(base) PS C:\prjs\amper>

最基本的工作流程大概会是:

编译
运行
测试
init
build
run
test

这里面,新建项目的命令init的格式大概就是:

(base) PS C:\prjs\amper> ./amper init -h
Usage: amper init [<options>] [<template>]

  Initialize a new Amper project based on a template

Options:
  -h, --help  Show this message and exit

Arguments:
  <template>  project template name substring, e.g., 'jvm-cli'

目前支持的模板有:

  • compose-android
  • compose-desktop
  • compose-ios
  • compose-multiplatform
  • jvm-cli
  • kmp-lib
  • multiplatform-cli

Amper的优势

Amper的优势很简单:

下面两个文件就能够构成一个完整的项目:

product: jvm/app

dependencies:
  - $compose.desktop.currentOs

settings:
  compose: enabled


repositories:
  - id: public
    url: https://maven.aliyun.com/repository/public/
  - id: central
    url: https://maven.aliyun.com/repository/jcentral/
import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.text.BasicText
import androidx.compose.material.MaterialTheme
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application

@Composable
@Preview
fun App() {
    MaterialTheme {
        Column(
            modifier = Modifier.fillMaxSize(),
            verticalArrangement = Arrangement.Center,
            horizontalAlignment = Alignment.CenterHorizontally,
        ) {
            BasicText("Hello, World!")
        }
    }
}

fun main() = application {
    Window(onCloseRequest = ::exitApplication) {
        App()
    }
}

目录结构大概就是:

|-- amper.yaml
|-- amper
|-- amper.bat
|-- src
    |-- Main.kt

这里面两个amper/amper.bat就是Amper的全部内容,只需要下载一次,之后只要引用运行一下,就会在项目目录下面拷贝这两个文件。

整个项目./amper.bat build./amper.bat stest./amper.bat run。对于Java/Kotlin这边来说,这简直就是天堂。

与Gradle合作

当然,Amper现在没有那个Compose常用的产生本地可运行程序的功能。所以Amper还设计了一套机制,就是作为Gradle的插件存在。这个时候,一个项目的目录结构就会变成:

|-- amper.yaml
|-- amper
|-- amper.bat
|-- src
    |-- Main.kt
|-- build.gradle.kts
|-- settings.gradle.kts
|-- gradlew
|-- gradlew.bat
|-- gradle
    |-- wrapper
        |-- gradle-wrapper.jar
        |-- gradle-wrapper.properties

这个时候,Amper可以单独运行,也可以作为Gradle的插件运行,大量的配置都可以放在amper.yaml里面,Gradle的配置就可以简化很多。一般而言,Compose的配置文件build.gradle.kts会变成:

compose.desktop {
    application {
        mainClass = "MainKt"
        nativeDistribution {
            packageName = "HelloCompose"
        }
    }
}

仅仅需要这样,Gradle只是用来产生本地可运行程序,其他的都交给Amper。

总结

  1. Amper赛高。
  2. Amper可以独立运行,也可以作为Gradle插件运行。
  3. Amper的配置文件简单,易读。
  4. Amper有一个问题就是Repositories的配置,在yaml文件中设置的时候,库还是排在系统默认的三个库的后面……你懂的,我还去提了一个issue……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/945831.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32 高级 物联网通讯之LoRa通讯

目录 LoRa通讯基础知识 常见的3种通讯协议 远距离高速率的传输协议 近距离高速率传输技术 近距离低功耗传输技术 低功耗广域网 采用授权频段技术 非授权频段 LoRa简介 LoRa的特点 远距离 低功耗 安全 标准化 地理定位 移动性 高性能 低成本 LoRa应用 LoRa组…

SAP月结、年结前重点检查事项(后勤与财务模块)

文章目录 一、PP生产模块相关的事务检查二、SD销售模块相关的事务检查:三、MM物料管理模块相关的事务检查四、FICO财务模块相关的事务检查五、年结前若干注意事项【SAP系统PP模块研究】 #SAP #生产订单 #月结 #年结 一、PP生产模块相关的事务检查 1、月末盘点后,生产用料的…

重装操作系统后 Oracle 11g 数据库数据还原

场景描述&#xff1a; 由于SSD系统盘损坏&#xff0c;更换硬盘后重装了操作系统&#xff0c;Oracle数据库之前安装在D盘(另一个硬盘)&#xff0c;更换硬盘多添加一个盘符重装系统后盘符从D变成E&#xff0c;也就是之前的D:/app/... 变成了现在的 E:/app/...&#xff0c;重新安装…

2D图像测量到3D点云之物体三维尺寸测量!!!!

0&#xff0c;引言 本文将从双目采集的2D图像到3D点云进行转化&#xff0c;并进行物体尺寸测量&#xff0c;旨在为读者展示2D图像如何关联3D点云&#xff0c;并进行相关工业应用。 将2D图像转化为3D点云&#xff0c;并进行物体尺寸测量的技术&#xff0c;在工业领域有着广泛的…

python 渗透开发工具之SQLMapApi Server不同IP服务启动方式处理 解决方案SqlMapApiServer外网不能访问的情况

目录 说在前面 什么是 SQLMapAPI 说明 sqlmapApi能干什么 sqlmapApi 服务安装相关 kali-sqlmap存放位置 正常启动sqlmap-api server SqlMapApi-Server 解决外网不能访问情况 说在前面 什么是sqlmap 这个在前面已经说过了&#xff0c;如果这个不知道&#xff0c;就可以…

如何添加使用高德地图资源

‌高德地图瓦片地址包括以下几种类型‌&#xff1a;‌12 ‌矢量底图‌&#xff1a; 地址&#xff1a;https://wprd04.is.autonavi.com/appmaptile?langzh_cn&size1&scale1&style7&x{x}&y{y}&z{z}描述&#xff1a;包含路网和注记的矢量底图。 ‌卫星影…

智能家居体验大变革 博联 AI 方案让智能不再繁琐

1. 全球AI技术发展背景及智能家居市场趋势 人工智能&#xff08;AI&#xff09;技术的飞速发展正在推动全球各行业的数字化转型。国际电信联盟与德勤联合发布《人工智能向善影响》报告指出&#xff0c;全球94%的商界领袖认为&#xff0c;人工智能技术对于其企业在未来5年内的发…

第三代增强经典BADI-增强菜单栏和子屏幕

文章目录 创建经典BADI实施BADI创建屏幕绘制屏幕 定义GUI运行结果程序代码 创建经典BADI 实施BADI 创建屏幕 绘制屏幕 定义GUI 运行结果 程序代码 *&---------------------------------------------------------------------* *& Report ZRP_BADITEST *& *&-…

联通 路由器 创维SK-WR9551X 联通华盛VS010 组mesh 和 锐捷X32 PRO 无缝漫游

前言 联通路由器&#xff1a;联通创维SK-WR9551X&#xff0c;联通华盛VS010组mesh&#xff0c;并与锐捷X32 PRO混合组网&#xff0c;开启无限漫游。 1、mesh ≠ 无缝漫游 mesh是实现路由器快速组网的一种方式&#xff0c;通过mesh组网后可以实现无缝漫游。 mesh组网的设备要…

如何使用大语言模型进行事件抽取与关系抽取

诸神缄默不语-个人CSDN博文目录 文章目录 1. 什么是事件抽取与关系抽取&#xff1f;2. 示例&#xff1a;使用大语言模型进行事件抽取与关系抽取 1. 什么是事件抽取与关系抽取&#xff1f; 事件抽取是指从文本中识别出与某些“事件”相关的信息。这些事件通常包括动作、参与者、…

Mysql COUNT() 函数详解

简介 COUNT()函数定义 COUNT()函数是SQL中常用的 聚合函数 &#xff0c;用于统计满足特定条件的记录数。它可以灵活地应用于各种查询场景&#xff0c;帮助用户快速获取所需的数据统计信息。该函数不仅能够计算所有行的数量&#xff0c;还能针对特定列进行计数&#xff0c;并支…

SD卡恢复数据:快速找回丢失文件!

由于其小尺寸和便携性&#xff0c;SD卡作为外部存储设备在用户中广泛应用。它适用于各种设备&#xff0c;例如数码相机、摄像机、音乐播放器、手机、电视、无人机等。 但是&#xff0c;与其他类型的存储设备一样&#xff0c;SD卡很精致&#xff0c;使用一段时间后可能会出现程…

OpenStack系列第四篇:云平台基础功能与操作(Dashboard)

文章目录 1. 镜像&#xff08;Image&#xff09;添加镜像查看镜像删除镜像 2. 卷&#xff08;Volume&#xff09;创建卷查看卷删除卷 3. 网络&#xff08;虚拟网络&#xff09;创建网络查看网络删除网络 4. 实例类型创建实例类型查看实例类型删除实例类型 4. 密钥对&#xff08…

HTML——43.创建表格

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>表格</title></head><body><!--table标签用来定义表格&#xff0c;border属性表示边框--><!--tr标签表示表格中的一行--><!--th标签表示表…

Sony偏振传感器加持 Blackfly S工业相机突破视觉成像反光难题【51camera】

为什么采用传感器偏振? A: 视觉系统一直都在试图克服玻璃、塑料和金属等反光表面产生的动态或多余光线、反射、朦胧和眩光影响。Teledyne FLIR的Blackfly S 机器视觉工业相机具有 Sony 的传感器偏振和 Spinnaker SDK 内置的防眩光功能&#xff0c;提供便于实施、轻量化且可靠…

Linux上安装配置单节点zookeeper

直接先去官网下载安装包&#xff0c; https://downloads.apache.org/zookeeper/ 选择合适的版本&#xff0c;然后上传至服务器 解压&#xff1a; tar -zxvf apache-zookeeper-3.9.3-bin.tar.gz创建data和logs目录 mkdir data mkdir logs配置环境变量&#xff1a; vim /etc/p…

零基础入门指针的应用

对于我这个非计算机专业的人来说&#xff0c;指针真的很让我头疼&#xff0c;该如何理解指针、如何使用指针是我的痛点&#xff0c;但是在嵌入式中又会经常用的到&#xff0c;所以本文将介绍该如何求使用指针。 一、指针的概念 什么是指针&#xff1f;指针就是编程语言中的一个…

Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(1):Oracle Dataguard 概述

Oracle Dataguard&#xff08;主库为 Oracle 11g 单节点&#xff09;配置详解&#xff08;1&#xff09;&#xff1a;Oracle Dataguard 概述 目录 Oracle Dataguard&#xff08;主库为 Oracle 11g 单节点&#xff09;配置详解&#xff08;1&#xff09;&#xff1a;Oracle Data…

Java开发生态2024年度总结报告

1 关键要点 尽管数据显示 Java 17 是最常用 JDK&#xff0c;但其用户占比并未超过半数。根据 New Relic 2024 Java 生态系统状态报告&#xff0c;Java 17、11 和 8 的用户比例分别为 35%、33% 和 29%。New Relic 数据中所谓“快速采用”指 Java 21 的采用率仅为 1.4%。虽相较 J…

PlasmidFinder:质粒复制子的鉴定和分型

质粒&#xff08;Plasmid&#xff09;是一种细菌染色体外的线性或环状DNA分子&#xff0c;也是一种重要的遗传元素&#xff0c;它们具有自主复制能力&#xff0c;可以在细菌之间传播&#xff0c;并携带多种重要的基因(如耐药基因与毒力基因等)功能。根据质粒传播的特性&#xf…