Heroku-具有本地依赖项的Maven应用程序在本地完美运行,但未部署

时间:2020-09-08 12:35:34

标签: java maven heroku

我有一个带有某些本地依赖项的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> -->

1 个答案:

答案 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不再只能在版本之间存储增量,因此回购大小会迅速增加。但是,我认为这似乎是一个合理的用例。

  1. 在您的mvn中添加一个新的存储库,该存储库指向项目目录中的目录:
pom.xml
  1. 创建该目录(确保在项目目录中时正在运行所有命令):

<repositories> <repository> <id>local-maven-repository</id> <url>file:///${project.basedir}/maven-repository</url> </repository> </repositories>

  1. 将工件部署到该存储库:
mkdir maven-repository
  1. 将您的更改和依赖JAR添加到Git并部署到Heroku:
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