2012-04-01 24 views
0

首先:我不是Java編碼器。我不熟悉Java/Maven工具鏈。我們正在使用Java庫作爲我們想要作爲Heroku後臺工作者啓動的項目。如何在Java中爲Heroku工作進程設置一個最小的Maven pom.xml文件?

該項目依賴兩個外部庫,可通過Maven的中央倉庫獲得的mongodb Java驅動程序以及另一個第三方庫。我已經看到Heroku article on "unmanaged dependencies",但其他內容似乎不存在,因爲我遇到如下錯誤:Could not find the main class: com.company.myproject.MyApp Program will exit.當我嘗試根據Heroku's instructions on "Getting Started with Java"在本地運行應用程序時。

我注意到他們的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> 
+0

我想出了一些東西:''標籤是壞的。我忘了我從哪裏得到這個信息,但它把事情搞砸了。一旦我把它拿出來,Maven甚至可以從NetBeans內部構建和運行。 – 2012-04-01 19:50:50

+1

''標籤意味着圖書館將以某種外部方式提供。 – 2012-04-02 19:49:07

+0

也許[jcabi-heroku-maven-plugin](http://www.jcabi.com/jcabi-heroku-maven-plugin/)可以幫助你 – yegor256 2013-03-17 14:58:58

回答

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目錄中。

+0

謝謝James。這清除了我的一些問題。看起來我可以在沒有copy-dependencies插件的情況下從NetBeans內運行應用程序。但是,當我在Heroku上運行時,情況可能不會如此。 – 2012-04-02 20:18:42

+2

在本地開發時,您不需要複製依賴關係,因爲通常使用本地m2 repo中的依賴項。但是當你在Heroku上運行時,這個m2 repo不會存在。 – 2012-04-03 14:39:53

+0

謝謝你明確地拼出這個。我懷疑是這樣的。 – 2012-04-04 20:38:29

相關問題