问题 使用maven-scala-plugin构建jar


我创建了scala应用程序,现在我想构建jar。 我跑 mvn package 比我尝试按命令运行jar

java -jar target/burner-1.0-SNAPSHOT.jar

我看到错误:

Failed to load Main-Class manifest attribute from

如何定义Main-Class属性? 我需要创建Manifest.mf吗?哪里? 或者我需要在pom.xml中的某个地方使用mainclass属性?

更新: 我用内容创建了src / main / resources / MANIFEST.MF文件

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: itsabear
Main-Class: ru.dmteam.App
Build-Jdk: 1.6.0_20

我没有忘记在文件末尾结束的行。 后 mvn package 我看到了新罐子。我在这个jar中检查了manifest.mf - 它包含正确的主类但是当我输入时 java -jar target/burner-1.0-SNAPSHOT.jar 我仍然看到一个错误 Failed to load Main-Class manifest attribute from

我的pom.xml http://pastie.org/1070483

更新2 我发现现在jar里有两个manifest.mf文件。 MANIFEST.MF和META-INF / MANIFEST.MF 我将我的自定义MANIFEST.MF移动到刚刚创建的META-INF文件夹(在src / main / resources中),但现在 mvn package 创建jar时覆盖它...


3035
2017-08-02 03:48


起源

你可以发布你的pom.xml的副本吗?您应该能够在Maven中执行此操作,而无需手动创建清单文件。 - Jon McAuliffe
我已经更新了帖子。 - Andrey Kuznetsov
我发现了一些新的事实并更新了帖子。 - Andrey Kuznetsov
scala文件是否已添加到您的jar中?这可以解释为什么“scala -cp”是'java -jar'命令不起作用的原因。您可以使用maven-assembly-plugin打包scala依赖项(我认为您也可以在此处指定默认的主类)。 - Jon McAuliffe
嗯......我的罐子里没有scala文件。根据maven-scala-plugin指南,我将尝试重新创建pom.xml(现在它很糟糕)。如果这不会有帮助,我会尝试maven组装。 - Andrey Kuznetsov


答案:


在使用scala-archetype-simple archetype(一个打印'Hello World'的简单项目)创建一个新的maven项目之后,我需要将以下内容添加到我的pom.xml中

   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <configuration>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
      <archive>
        <manifest>
          <mainClass>test.App</mainClass>
        </manifest>
      </archive>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

为了上课 test.App 使用该命令调用时按需运行

java -jar ./target/mytest-1.0-SNAPSHOT-jar-with-dependencies.jar

运行命令后

mvn package

14
2017-08-02 08:37



当我输入mvn包时,我看到错误 'single' was specified in an execution, but not found in the pluin “ - Andrey Kuznetsov
所以现在我可以通过命令mvn assembly:assembly来构建工作jar,但我需要用命令运行它 java -cp target/file.jar -DmainClass ru.dmteam.App。是否可以创建具有正确清单的jar? - Andrey Kuznetsov
<executions>组件应该将程序集创建绑定到正常的包阶段,是否已将其包含在pom.xml中? <archive>条目应配置为包含您的案例中的<mainClass> ru.dmteam.App。 - Jon McAuliffe
是的我将所有内容都包含在pom.xml中 - pastie.org/1071675 - Andrey Kuznetsov
当我将maven版本改为2.2-beta-3时,所有问题都消失了!谢谢。 - Andrey Kuznetsov


你可以用这种方式运行jar

scala -cp target / projectname-1.0-SNAPSHOT.jar


-1
2017-08-02 04:36



此命令将打开scala解释器控制台。 - Andrey Kuznetsov