首先,我不是Java程序员。我是Java / Maven工具链的新手。我们正在为要作为Heroku后台工作者启动的项目使用Java库。
该项目依赖于两个外部库,可通过Maven的中央存储库使用的mongodb Java驱动程序,以及另一个第三方库。我已经看过Heroku article on "unmanaged dependencies",但是似乎有些其他东西丢失了,因为当我尝试根据Heroku's instructions on "Getting Started with Java"在本地运行该应用程序时出现类似Could not find the main class: com.company.myproject.MyApp Program will exit.
的错误。
我注意到他们的pom.xml文件包含一个Maven插件maven-dependency-plugin
以复制依赖项,当我检查target/classes
文件夹时,没有看到任何依赖项。
Heroku还发布了guide on building background workers in Java。该pom.xml
包含一个构建程序集插件,看起来更复杂。
我在所有的仪式中都迷失了(尤其是来自Rails),我想用最简单的pom.xml
来使它运行。 Heroku上是否有Java工作者的Maven原型文件?我还将NetBeans用作IDE,如果可以的话,最好使用IDE工具,但这是次要的。
到目前为止,在我的pom.xml
以下:
<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>com.myproject</groupId>
<artifactId>myproject</artifactId>
<version>0.1</version>
<packaging>jar</packaging>
<name>myproject</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.thirdparty</groupId>
<artifactId>thirdparty</artifactId>
<version>0.2.9</version>
<scope>provided</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>project-local</id>
<name>Project-local Repo</name>
<url>file:${project.basedir}/repo</url>
</repository>
</repositories>
</project>
最佳答案
您绝对需要使用maven-dependency-plugin
将所有依赖项复制到target/dependency
目录中:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals><goal>copy-dependencies</goal></goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
然后,您的
Procfile
需要在类路径中包括这些依赖项:foo: java -cp target/classes:target/dependency/* com.myproject.Main
其中
com.myproject.Main
是要运行的Java类的类名(必须包含public static void main
方法。请注意,这还将将从src/main/java
编译的Java类添加到target/classes
目录中。