如何在Java中为Heroku工作进程设置最小的Maven pom.xml文件?
首先:我不是Java程序员。我是Java/Maven工具链的新手。我们正在使用Java库进行一个项目,我们希望以Heroku后台工作者的身份启动该项目 该项目依赖于两个外部库,一个是通过Maven的central repo提供的mongodb Java驱动程序,另一个是第三方库。我已经看到了,但似乎缺少了其他内容,因为我遇到了如下错误:如何在Java中为Heroku工作进程设置最小的Maven pom.xml文件?,java,maven,heroku,Java,Maven,Heroku,首先:我不是Java程序员。我是Java/Maven工具链的新手。我们正在使用Java库进行一个项目,我们希望以Heroku后台工作者的身份启动该项目 该项目依赖于两个外部库,一个是通过Maven的central repo提供的mongodb Java驱动程序,另一个是第三方库。我已经看到了,但似乎缺少了其他内容,因为我遇到了如下错误:找不到主类:com.company.myproject.MyApp程序将退出。当我尝试根据在本地运行应用程序时 我注意到他们的pom.xml文件包含一个Maven
找不到主类:com.company.myproject.MyApp程序将退出。
当我尝试根据在本地运行应用程序时
我注意到他们的pom.xml文件包含一个Maven插件Maven dependency plugin
来复制依赖项,当我检查我的target/classes
文件夹时,我没有看到任何依赖项
Heroku还出版了一本杂志。该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>
4.0.0
com.myproject
我的项目
0.1
罐子
我的项目
http://maven.apache.org
UTF-8
朱尼特
朱尼特
3.8.1
测试
org.mongodb
mongo java驱动程序
2.7.3
第三方
第三方
0.2.9
假如
本地项目
本地回购计划
文件:${project.basedir}/repo
您肯定需要使用maven依赖插件
将所有依赖项复制到目标/依赖项
目录中:
<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>
其中
com.myproject.Main
是要运行的Java类的类名(它必须包含一个公共静态void main
方法。注意,这还将从src/main/Java
编译的Java类添加到目标/classes
目录中。我发现:
标记不好。我忘了从哪里得到它,但它把事情搞砸了。一旦我取出它,Maven就构建了它甚至从NetBeans内部运行。
标记意味着该库将以某种外部方式提供。也许可以帮助YouTunks James。这就解决了我的许多问题。似乎我可以在NetBeans内部运行应用程序,而无需复制依赖插件。但当我在Heroku上运行它时,可能不会出现这种情况。你呢在本地开发时不需要复制依赖项,因为通常会使用本地m2 repo中的依赖项。但是,当您在Heroku上运行m2 repo时,该m2 repo将不存在。感谢您明确地解释了这一点。我怀疑是这样的情况。此外,如果您是POM结构的新手,请阅读POM参考页了解将提供的构建标记放入XML结构的位置。
foo: java -cp target/classes:target/dependency/* com.myproject.Main