如何在Java中为Heroku工作进程设置最小的Maven pom.xml文件?

时间:2012-04-01 19:03:43

标签: java maven heroku

首先:我不是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 Javapom.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>

1 个答案:

答案 0 :(得分:2)

您肯定需要使用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目录。