我正在为Edge和Chrome构建一个自托管的Chrome扩展。到目前为止,我使用maven和这个插件得到了一个工作良好的CI管道(https://github.com/bmatthews68/crx-maven-plugin)我成功地实现了.crx文件的版本控制、打包和签名自动化,并轻松上传到Nexus存储库(我们的目的是使用组策略将上传URL指向Nexus版本,以便将扩展部署到用户(。
但我们发现该插件有点过时,并且使用crx2格式进行扩展打包。不久前,对crx2的支持被取消(chromium v75左右(,当前的浏览器版本需要crx3或不会安装扩展。
目前封装crx3扩展的唯一可靠方法似乎是使用chrome可执行文件本身,但这似乎不是CI管道的最佳想法:-/
欢迎任何建议!
正如您所提到的,CRX2
两年前在Chrome 75中被弃用,CRX存在一些问题₂并且其支撑在Chrome 78中被完全去除。因为所有扩展都必须转移到CRX3格式!
我不确定你是如何用maven构建的,也许是一个脚本或其他什么。在这种情况下,您可能需要适当地修改脚本,或者找到一些支持CRX3
格式的参考文档,这些文档与您用于构建扩展的工具有关。
否则,您必须将其打包为crx3格式。请参阅本文档。
我终于找到了一种方法,尽管是间接的。有一个CRX3 NPM项目一直在更新CRX3格式https://www.npmjs.com/package/crx3
使用exec-maven插件调用NPM,如下所述,我已经能够正确地打包crx文件(这在本地windows工作站和ALM-linux节点中有效(:
<!-- Build crx file using NPM -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>npm</executable>
<workingDirectory>${project.build.directory}</workingDirectory>
<commandlineArgs>install</commandlineArgs>
</configuration>
</plugin>
我为NPM使用了一个package.json文件,其中包含版本占位符,这样我就可以继续在pom:中管理版本
{
"name": "${project.artifactId}",
"version": "${project.version}",
"private": true,
"dependencies": {
"crx3": "^1.1.3"
},
"scripts": {
"install": "crx3 ${project.artifactId}-${project.version} --keyPath crx.pem --appVersion ${crx.version} --crxPath ${project.artifactId}-${project.version}.crx"
}
}
为了正确地进行过滤,我在pom中也使用了maven资源插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy-extension-resources</id>
<phase>generate-sources</phase>
<goals>
<goal>resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}</outputDirectory>
<resources>
<!-- Resource filtering to include version number in manifest.json and copy sources to a subfolder in /target -->
<resource>
<directory>src/main/chrome</directory>
<filtering>true</filtering>
<includes>
<include>**/manifest.json</include>
</includes>
</resource>
<resource>
<directory>src/main/chrome</directory>
<filtering>false</filtering>
<excludes>
<exclude>**/manifest.json</exclude>
</excludes>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>copy-external-resources</id>
<phase>generate-sources</phase>
<goals>
<goal>resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<!-- Resource filtering to include version number in update.xml and package.json and copy resources to /target folder -->
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>update.xml</include>
<include>package.json</include>
<include>package-lock.json</include>
</includes>
</resource>
<resource>
<filtering>false</filtering>
<directory>src/main/resources</directory>
<includes>
<include>crx.pem</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>