2012-04-01 6 views
0

第1オフ:私はJavaコーダーではありません。私はJava/Mavenのツールチェーンが初めてです。私たちはHerokuのバックグラウンドワーカーとして立ち上げたいプロジェクトにJavaライブラリを使用しています。JavaでHerokuワーカープロセス用の最小限のMaven pom.xmlファイルを設定する方法は?

このプロジェクトでは、2つの外部ライブラリ、Mavenの中央リポジトリから利用可能なmongodb Javaドライバ、および別のサードパーティライブラリに依存しています。 Heroku's instructions on "Getting Started with Java"に従ってローカルでアプリを実行しようとすると、Could not find the main class: com.company.myproject.MyApp Program will exit.のようなエラーが表示されるため、Heroku article on "unmanaged dependencies"が見えましたが、他に何かが見つからないように見えます。

依存関係をコピーするために、そのpom.xmlファイルにMavenプラグインmaven-dependency-pluginが含まれていることがわかりました。target/classesフォルダをチェックすると、依存関係は表示されません。

また、guide on building background workers in Javaも公開しています。そのpom.xmlにはビルドアセンブリプラグインが含まれていますが、これはもっと複雑なようです。

私はこの儀式(特にRailsから来ています)で少し失われました。これを実行するには、できるだけ簡単にpom.xmlでstatを実行したいと思います。 Heroku上のJavaワーカー用のMavenアーキタイプファイルはありますか?また、NetBeansをIDEとして使用しています。利用可能であれば、IDEツールを使用することは素晴らしいことですが、それは第2の優先事項です。

pom.xmlこれまでに以下

:あなたは間違いなくtarget/dependencyディレクトリに依存関係のすべてをコピーするmaven-dependency-pluginを使用する必要が

<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内からでも構築され実行されました。 –

+1

''タグは、ライブラリが何らかの外部の方法で提供されることを意味します。 –

+0

[jcabi-heroku-maven-plugin](http://www.jcabi.com/jcabi-heroku-maven-plugin/)がお手伝いします – yegor256

答えて

2

<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 dirに追加することにも注意してください。

+0

ありがとうございました。それは私が持っていたいくつかの質問をクリアします。コピー依存関係プラグインなしでNetBeans内からアプリを実行できるようです。しかし、おそらくこれは私がHerokuで実行する場合には当てはまりません。 –

+2

通常、ローカルm2リポジトリからのものが使用されるため、ローカルで開発するときに依存関係をコピーする必要はありません。しかし、あなたがそれをHerokuで走らせると、そのm2のレポは存在しません。 –

+0

これを明示的に記入していただきありがとうございます。私はこのような何かを疑った。 –

関連する問題