关于java:没有主要的清单属性,在jar中

no main manifest attribute, in jar

我正在尝试运行maven shade插件创建的jar。我正在按以下方式配置主类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<project>
...
<build>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    maven-shade-plugin</artifactId>
    <version>2.3</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
              <manifestEntries>
                <Main-Class>org.comany.MainClass</Main-Class>
                <Build-Number>123</Build-Number>
              </manifestEntries>
            </transformer>
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>
</plugins>

但是,当我尝试使用JavaJAR App.jar运行JAR时,它会导致以下错误

1
"no main manifest attribute, in  app.jar"

编辑:我使用jar tf app.jar检查了jar的内容,并看到了manifest.mf文件。但是它没有主类的入口。如何确保jar中的清单文件有这个条目,以便在shade插件配置中添加它?


Maven的shade插件使用jar插件生成的jar并添加对它的依赖。因为shade插件上的转换似乎不能正常工作,所以您只需要为jar插件设置如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<build>
  ...
  <plugins>
    ...    
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      maven-jar-plugin</artifactId>
      <version>3.0.2</version>
      <configuration>
       
          <manifest>
            true</addClasspath>
            <mainClass>com.mypackage.MyClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
  <plugin>
    [Your shade plugin definition without the transformers here]
  </plugin>
</build>

别忘了添加阴影作为目标:

mvn clean package shade:shade