我有一个带有某些本地依赖项的Heroku应用程序,该应用程序是通过以下命令安装的:
mvn install:install-file -Dfile="lib\com\sforce\soap\partner\1.0\partner-1.0.jar" -DgroupId="com.sforce.soap.partner" -DartifactId=partner -Dversion="1.0" -Dpackaging=jar
通过此操作,我执行了mvn软件包并进行了全新安装,并且我的应用在我的本地环境中运行完美。我遇到的问题是,当我尝试将此应用程序部署到Heroku时,因为它失败并显示“无法解决依赖关系错误”(尤其是partner.jar依赖关系失败)。我曾尝试使用前面的命令在jar控制台中安装我的jar,但它说未找到mvn命令。
该如何解决?这是我的pom:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.aisfg</groupId>
<artifactId>ais-salesforce-heroku-bloomber</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.1.1</version>
<configuration>
<assembleDirectory>target</assembleDirectory>
<programs>
<program>
<mainClass>Service</mainClass>
<name>service</name>
</program>
</programs>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>assemble</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.force.api/force-wsc -->
<dependency>
<groupId>com.force.api</groupId>
<artifactId>force-wsc</artifactId>
<version>35.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mozilla/rhino -->
<dependency>
<groupId>org.mozilla</groupId>
<artifactId>rhino</artifactId>
<version>1.7.12</version>
</dependency>
<!-- https://www.stringtemplate.org/ -->
<dependency>
<groupId>org.antlr</groupId>
<artifactId>ST4</artifactId>
<version>4.0.8</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20200518</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.12</version>
</dependency>
<!-- LOCAL DEPENDENCIES -->
<dependency>
<groupId>com.bloomberglp.blpapi</groupId>
<artifactId>blpapi</artifactId>
<version>3.12.1</version>
</dependency>
<dependency>
<groupId>com.sforce.soap.partner</groupId>
<artifactId>partner</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.sforce.soap.enterprise</groupId>
<artifactId>enterprise</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<!-- <repositories>
<repository>
<id>project_lib</id>
<name>Repository in project's lib dir</name>
<layout>default</layout>
<url>file:///${project.basedir}/lib</url>
</repository>
</repositories> -->
答案 0 :(得分:1)
select distinct sensor_id, types from (
SELECT
sensor_id, COUNT(distinct event_type) over(partition by sensor_id) AS `types`
FROM
`events` ) X
ORDER BY
sensor_id ASC;
在本地存储库中安装依赖项(默认情况下)(在Linux / macOS下默认为mvn install:install-file
)。这将使依赖项可用于本地计算机上的Maven,但不能像您观察到的那样在Heroku中进行构建。
由于以下几个原因,在Herkou控制台中使用此命令也将无法工作(如果~/.m2/repository
可用):
但是,您可以执行此操作。这将需要将您的JAR文件签入Git,以便Heroku在构建过程中可以访问它。这有一个缺点:如果您经常更新文件,则由于Git不再只能在版本之间存储增量,因此回购大小会迅速增加。但是,我认为这似乎是一个合理的用例。
mvn
中添加一个新的存储库,该存储库指向项目目录中的目录:pom.xml
<repositories>
<repository>
<id>local-maven-repository</id>
<url>file:///${project.basedir}/maven-repository</url>
</repository>
</repositories>
mkdir maven-repository
mvn deploy:deploy-file -DgroupId=com.sforce.soap.partner -DartifactId=partner -Dversion=1.0 -Durl=file:./maven-repository/ -DrepositoryId=local-maven-repository -DupdateReleaseInfo=true -Dfile=lib\com\sforce\soap\partner\1.0\partner-1.0.jar
如果您不想检入二进制文件,则必须具有依赖项的可远程访问的Nexus回购协议。您可以使用密码保护它并在Heroku上进行设置:https://devcenter.heroku.com/articles/using-a-custom-maven-settings-xml#using-password-protected-repositories