部署Vaadin Chart应用至Heroku:如何上传许可证文件至主目录
解决Vaadin Charts许可证文件在Heroku部署时找不到的问题
我来帮你搞定这个部署难题——Heroku的构建环境默认不会包含本地用户主目录里的Vaadin Charts许可证文件,所以编译阶段才会抛出找不到许可证的错误。下面是几个实用的解决方案,按推荐程度排序:
方法1:将许可证文件嵌入项目,通过构建脚本复制到主目录
这是最直接的方式,把许可证文件放到项目中,让Maven在构建时自动复制到Heroku的用户主目录:
- 在项目根目录下创建
.vaadin文件夹(如果不存在的话),把你的charts.license文件放进去。 - 修改
pom.xml,添加Maven资源插件配置,让它在构建初始化阶段把许可证文件复制到目标目录:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>copy-charts-license</id> <phase>initialize</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${user.home}/.vaadin</outputDirectory> <resources> <resource> <directory>${project.basedir}/.vaadin</directory> <includes> <include>charts.license</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins> </build>
- 把
.vaadin/charts.license加入版本控制(确保推送到Heroku的代码包含这个文件),然后重新部署即可。
方法2:通过Heroku配置变量存储许可证内容,构建前写入文件
如果不想把许可证文件提交到版本控制(比如担心敏感信息泄露),这个方法更安全:
- 打开Heroku仪表盘,进入你的应用,找到Settings -> Config Vars,添加一个新变量:
- 名称:
VAADIN_CHARTS_LICENSE - 值:直接粘贴
charts.license文件里的全部内容
- 名称:
- 在项目根目录创建
pre-build.sh脚本,内容如下:
#!/bin/bash # 创建.vaadin目录(如果不存在) mkdir -p ~/.vaadin # 将配置变量的内容写入许可证文件 echo "$VAADIN_CHARTS_LICENSE" > ~/.vaadin/charts.license
- 给脚本添加执行权限:
chmod +x pre-build.sh(本地执行一次后,把脚本提交到版本控制) - 修改
pom.xml,让Maven在构建前执行这个脚本:
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>run-pre-build-script</id> <phase>initialize</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable>${project.basedir}/pre-build.sh</executable> </configuration> </execution> </executions> </plugin> </plugins> </build>
- 提交所有修改并重新部署,Heroku会在编译前自动生成许可证文件。
方法3:使用自定义Buildpack(进阶选项)
如果以上方法不满足你的定制需求,你可以编写自定义Heroku Buildpack,在构建环境初始化时自动配置许可证文件。不过这个方法需要掌握Buildpack的编写逻辑,适合有一定Heroku定制经验的用户。
不管用哪种方法,核心都是让Heroku的构建环境在编译阶段能访问到~/.vaadin/charts.license文件,这样Vaadin Charts的编译插件就能顺利找到许可证了。
内容的提问来源于stack exchange,提问作者masiboo
相关产品推荐
相关产品推荐

