mvn exec:sbt项目上的java

时间:2013-10-29 17:52:16

标签: scala maven sbt

我有一个scala项目,我正在进行sbt publish。它给了我一些文物:

/maven/repo/com/davez0r/proj_2.10/vers/proj_2.10-vers.jar
/maven/repo/com/davez0r/proj_2.10/vers/proj_2.10-vers.pom
...others...

现在我想在那个jar里面运行一个类:

$ mvn -f /maven/repo/com/davez0r/proj_2.10/vers/ exec:java 
      -Dexec.mainClass="com.davez0r.App"

这不起作用:

java.io.FileNotFoundException: /maven/repo/com/davez0r/proj_2.10/vers/pom.xml

好的,我可以将mvn指向pom生成的sbt文件:

$ mvn -f /maven/repo/com/davez0r/proj_2.10/vers/proj_2.10-vers.pom exec:java 
      -Dexec.mainClass="com.davez0r.App"

现在它找到了我的依赖项,但它找不到jar旁边的pom

java.lang.ClassNotFoundException: com.davez0r.App

我可以创建一个单独的项目,其唯一的依赖是这组工件,但这似乎是不必要的。我将把这个细节作为答案发布。

有没有办法通过mvn直接从仓库运行?我的pom中是否设置了错误的内容?

<project>
  <modelVersion>4.0</modelVersion>
  <groupId>com.davez0r</groupId>
  <artifactId>proj_2.10</artifactId>
  <packaging>jar</packaging>
  <description>proj</description>
  <version>vers</version>
  <name>proj</name>
  <organization>
    <name>com.davez0r</name>
  </organization>
  <dependencies>...</dependencies>
</project>

谢谢!

1 个答案:

答案 0 :(得分:1)

可以通过创建单独的pom.xml

来实现此目的
<project>
  <modelVersion>4.0.0</modelVersion>
  <repositories>
    <url>http://davez0r.com/maven/</url>
    ...
  </repositories>

  <groupId>com.davez0r</groupId>
  <artifactId>launcher</artifactId>
  <version>1</version>

  <dependencies>
    <dependency>
      <groupId>com.davez0r</groupId>
      <artifactId>proj_2.10</artifactId>
      <version>vers</version>
    </dependency>
  </dependencies>
</project>

然后我可以在包含上述文件的目录中mvn exec:java并且运行正常。