没有主清单属性错误-带有Maven jar插件的IntelliJ

问题描述

我正在跟踪在此链接https://stackabuse.com/web-scraping-the-java-way/)上找到的教程,但是当打包项目并运行jar时,当我使用时,在终端中会收到“无主清单属性错误java -jar target/ApartmentHunt-1.0-SNAPSHOT.jar。我的pom.xml看起来像

<?xml version="1.0" encoding="UTF-8"?>

<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>org.example</groupId>
  <artifactId>ApartmentHunt</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>ApartmentHunt</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.13.1</version>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <groupId>org.apache.Maven.plugins</groupId>
          <artifactId>Maven-shade-plugin</artifactId>
          <version>3.2.0</version>
          <executions>
            <execution>
              <phase>package</phase>
              <goals>
                <goal>shade</goal>
              </goals>
              <configuration>
                <transformers>
                  <transformer
                          implementation="org.apache.Maven.plugins.shade.resource.ManifestResourceTransformer">
                    <mainClass>org.example.App</mainClass>
                  </transformer>
                </transformers>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

App.java具有main方法,位于src / main / java / org.exmaple中,仅包含一条print语句。代码与教程完全相同,但是出现错误。我已经从教程中克隆了仓库,并且可以在我的机器上使用,所以我不确定我的项目有什么问题。这是我第一次使用maven进行项目,并且使用了maven quickstart原型。

我使用了其他帖子中的各种程序集插件,但无法解决我的问题。

解决方法

检查您的代码主要方法是否在App.java中?

,

尝试使用maven-jar-plugin

barchart <- function(data_slice) {
    mpg %>%
        slice(data_slice) %>%
        ggplot(aes(x=model)) + geom_bar()
    }

lapply(lap_list,barchart)

并运行mvn comand:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
    <archive>
        <manifest>
            <addClasspath>true</addClasspath>
            <mainClass>org.example.App</mainClass>
        </manifest>
    </archive>
</configuration>
</plugin>
,

将以下插件添加到我的pom.xml并运行mvn assembly:single解决了该问题。尽管我不明白为什么我在打包阶段在插件中指定时无法运行mvn package做同样的事情。另外,在任何源代码更改之后,我都必须mvn compile。下面的代码

<plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
            <archive>
              <manifest>
                <mainClass>org.example.App</mainClass>
              </manifest>
            </archive>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <appendAssemblyId>false</appendAssemblyId>
          </configuration>
          <executions>
            <execution>
              <id>make-assembly</id> <!-- this is used for inheritance merges -->
              <phase>package</phase> <!-- bind to the packaging phase -->
              <goals>
                <goal>single</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
,

遵循此video中的说明。

当您到达工件创建点(Ctrl + Shift + Alt + S)时,请更改清单的位置,如下所示。 (\ src \ main \ resources)