Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中为Heroku工作进程设置最小的Maven pom.xml文件?_Java_Maven_Heroku - Fatal编程技术网

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

如何在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

首先:我不是Java程序员。我是Java/Maven工具链的新手。我们正在使用Java库进行一个项目,我们希望以Heroku后台工作者的身份启动该项目

该项目依赖于两个外部库,一个是通过Maven的central repo提供的mongodb Java驱动程序,另一个是第三方库。我已经看到了,但似乎缺少了其他内容,因为我遇到了如下错误:
找不到主类: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