ChatGPT:Maven构建问题——配置Maven以生成可执行JAR文件并设置主类、解决Maven生成多个JAR文件的问题

ChatGPT:Maven构建问题------配置Maven以生成可执行JAR文件并设置主类、解决Maven生成多个JAR文件的问题



Others-1.0-SNAPSHOT.jar中没有主清单属性
ChatGPT:
"Others-1.0-SNAPSHOT.jar中没有主清单属性"错误通常发生在尝试运行一个Java JAR文件时,因为JAR文件缺少了主清单属性(Main-Class),这是JAR文件用于标识应用程序的入口点的元数据。
要解决这个问题,您需要在JAR文件的清单文件(META-INF/MANIFEST.MF)中添加一个主清单属性,以指定应用程序的入口类。
以下是一个示例清单文件的内容:
makefile 复制代码
Manifest-Version: 1.0
Main-Class: com.example.YourMainClass
请注意以下几点:
Manifest-Version 行指定了清单文件的版本,通常设置为 "1.0"。
Main-Class 行指定了应用程序的入口类的完全限定类名(包括包名),例如 com.example.YourMainClass。这个类必须包含一个public static void main(String[] args) 方法,作为应用程序的入口点。
您需要将这个清单文件添加到JAR文件的META-INF 目录下,并确保清单文件的名称为 MANIFEST.MF(全部大写)。
如果您使用构建工具(如Maven或Gradle)来构建JAR文件,通常可以在构建配置中指定主清单属性。例如,使用Maven的插件可以在pom.xml文件中配置主清单属性。
一旦添加了主清单属性并保存了清单文件,您的JAR文件就应该能够正确运行了。

我使用的是maven,怎样在pom里面设置
ChatGPT:
在Maven项目中,您可以使用maven-jar-plugin插件来配置JAR文件的主清单属性。下面是如何在pom.xml文件中设置主清单属性的示例:
xml 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.0</version> <!-- 使用最新版本的 maven-jar-plugin -->

            <configuration>
                <archive>
                    <manifest>
                        <!-- 指定主清单属性 -->
                        <mainClass>com.example.YourMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>
上述配置中,我们使用了maven-jar-plugin插件,并在其配置中指定了主清单属性<mainClass>。请将com.example.YourMainClass替换为您的应用程序的实际入口类的完全限定类名。
当您运行mvn clean packagemvn install等Maven构建命令时,该插件将会生成包含指定主清单属性的JAR文件。
确保在pom.xml文件的<build>元素下的<plugins>中添加了上述的maven-jar-plugin配置,并替换主清单属性的值为您的应用程序的入口类。然后运行Maven构建命令以重新构建您的项目,生成包含主清单属性的JAR文件。

如果想在MANIFEST.MF加上作者怎么办
ChatGPT:
如果您想在JAR文件的 MANIFEST.MF 文件中添加作者信息,您可以使用 Maven 插件来实现。以下是如何在 Maven 项目中配置 JAR 文件的 MANIFEST.MF 文件以包含作者信息的示例:
首先,在您的 pom.xml 文件中添加 maven-jar-plugin 插件的配置,指定 MANIFEST.MF 中的作者信息。您可以使用 maven-jar-plugin 插件的 <manifestEntries> 元素来指定自定义的 MANIFEST.MF 条目,其中包括作者信息。
xml 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.0</version> <!-- 使用最新版本的 maven-jar-plugin -->

            <configuration>
                <archive>
                    <manifest>
                        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                        <manifestEntries>
                            <!-- 添加作者信息 -->
                            <Created-By>Your Name</Created-By>
                        </manifestEntries>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>
上述配置中,我们在 maven-jar-plugin<manifestEntries> 元素下添加了 <Created-By> 条目,用于指定作者信息。请将 "Your Name" 替换为实际的作者名字或信息。
然后,运行 Maven 构建命令(如 mvn clean packagemvn install)以重新构建您的项目。生成的 JAR 文件中的 MANIFEST.MF 文件应该包含您指定的作者信息。
请注意,<addDefaultImplementationEntries><addDefaultSpecificationEntries> 元素分别用于添加默认的实现和规范条目,具体取决于您的需求是否需要它们。如果不需要这些默认条目,可以将它们设置为 false
最后生成的 MANIFEST.MF 文件可能如下所示:
makefile 复制代码
Manifest-Version: 1.0
Created-By: Your Name
这样就成功在 MANIFEST.MF 文件中添加了作者信息。

为什么打包的时候依赖没有打包进来
ChatGPT:
如果在打包时依赖没有正确打包进来,可能有以下几个常见的原因:
依赖范围问题 :Maven 依赖可以有不同的范围,如 compileruntimetest 等。默认情况下,只有 compile 范围的依赖会被打包进 JAR 文件。确保您的依赖的范围正确,如果需要在运行时和编译时都使用它们,应将它们放在 compile 范围中。
xml 复制代码
<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>dependency-artifact</artifactId>
        <version>1.0.0</version>
        <!-- 通常 compile 范围表示依赖会被打包 -->
        <scope>compile</scope>
    </dependency>
</dependencies>
构建配置问题 :确保 Maven 构建配置文件 pom.xml 中没有排除依赖的配置。在 <dependencies> 部分内,确保没有使用 <exclusions> 标签排除依赖。
xml 复制代码
<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>your-dependency</artifactId>
        <version>1.0.0</version>
        <!-- 不要使用 <exclusions> 排除依赖 -->
    </dependency>
</dependencies>
Clean 构建 :在执行 Maven 构建之前,可以尝试运行 mvn clean 命令,以清除旧的构建文件和依赖,然后再运行 mvn package 或其他构建命令。
依赖不在 Maven 仓库中:确保您的依赖已经上传到 Maven 仓库或者在您的本地 Maven 仓库中存在。如果依赖没有正确发布到仓库,Maven 将无法找到它并将其打包到项目中。
依赖版本问题:检查依赖的版本号是否正确。如果版本号不匹配,Maven 可能无法正确解析依赖并将其打包。
IDE 缓存问题:有时 IDE 可能会缓存依赖信息,如果缓存过期或损坏,可能导致依赖无法正确加载。尝试清除 IDE 缓存并重新构建项目。
如果您仍然遇到问题,建议检查 Maven 构建日志以查看详细的错误信息,以便更好地了解问题所在。此外,可以使用 Maven 命令行来构建项目,以排除 IDE 的因素。

这是我的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>Others</groupId>
 <artifactId>Others</artifactId>
 <version>1.0-SNAPSHOT</version>

 <properties>
     <java.version>1.8</java.version>

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

 <dependencies>

     <dependency>
         <groupId>cn.hutool</groupId>
         <artifactId>hutool-all</artifactId>
         <version>5.8.16</version>
     </dependency>

     <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>easyexcel</artifactId>
         <version>3.0.5</version>
         <!--            <exclusions>-->
         <!--                <exclusion>-->
         <!--                    <groupId>org.slf4j</groupId>-->
         <!--                    <artifactId>slf4j-api</artifactId>-->
         <!--                </exclusion>-->
         <!--            </exclusions>-->
     </dependency>

     <!--Jsoup解析网页-->
     <dependency>
         <groupId>org.jsoup</groupId>
         <artifactId>jsoup</artifactId>
         <version>1.10.2</version>
     </dependency>

     <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>fastjson</artifactId>
         <version>1.2.41</version>
     </dependency>

     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <version>1.18.22</version>
     </dependency>

 </dependencies>

 <build>
     <plugins>
         <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-jar-plugin</artifactId>
             <version>3.2.0</version> <!-- 使用最新版本的 maven-jar-plugin -->

             <configuration>
                 <archive>
                     <manifest>
                         <!-- 指定主清单属性 -->
                         <mainClass>HtmlParseUtil</mainClass>
                     </manifest>
                 </archive>
             </configuration>
         </plugin>
     </plugins>
 </build>

</project>
ChatGPT:
根据您提供的 pom.xml 文件,依赖看起来是正确配置的,而且也没有排除任何依赖。这通常意味着依赖应该被正确地打包进您的 JAR 文件中。
如果在构建过程中仍然遇到依赖未正确打包的问题,您可以尝试以下步骤来排除问题:
清理并重新构建:首先尝试运行以下命令清理项目并重新构建:
bash 复制代码
mvn clean package
这将会清理之前生成的构建文件,并重新生成 JAR 文件。确保没有构建错误或警告信息。
检查生成的 JAR 文件:确保在正确的目录下找到了生成的 JAR 文件,并且该 JAR 文件的大小与您期望的相符。可以使用压缩工具(如 WinRAR 或 7-Zip)来打开 JAR 文件并查看其内容,以确认依赖是否已包含在 JAR 文件中。
依赖版本问题 :如果您在代码中使用了某个依赖的特定版本,而且该依赖的版本与 pom.xml 中的版本不一致,可能会导致问题。确保代码中使用的版本与 pom.xml 中声明的版本一致。
重新导入项目:如果您使用的是集成开发环境(IDE),尝试重新导入项目或清除 IDE 缓存以确保依赖正确地加载。
如果您在执行上述步骤后仍然遇到问题,请提供详细的构建错误信息或日志,以便更进一步的帮助。

这是打包的日志:
bash 复制代码
C:\Users\23991\.jdks\corretto-1.8.0_382\bin\java.exe -Dmaven.multiModuleProjectDirectory=D:\IDEA\Others -Djansi.passthrough=true -Dmaven.home=D:\Maven\apache-maven-3.8.1 -Dclassworlds.conf=D:\Maven\apache-maven-3.8.1\bin\m2.conf "-Dmaven.ext.class.path=D:\IDEA\IntelliJ IDEA 2020.3.1\plugins\maven\lib\maven-event-listener.jar" "-javaagent:D:\IDEA\IntelliJ IDEA 2020.3.1\lib\idea_rt.jar=58345:D:\IDEA\IntelliJ IDEA 2020.3.1\bin" -Dfile.encoding=UTF-8 -classpath D:\Maven\apache-maven-3.8.1\boot\plexus-classworlds-2.6.0.jar;D:\Maven\apache-maven-3.8.1\boot\plexus-classworlds.license org.codehaus.classworlds.Launcher -Didea.version=2023.1.1 package
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------< Others:Others >----------------------------
[INFO] Building Others 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ Others ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ Others ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 9 source files to D:\IDEA\Others\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ Others ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\IDEA\Others\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ Others ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ Others ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ Others ---
[INFO] Building jar: D:\IDEA\Others\target\Others-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.358 s
[INFO] Finished at: 2023-09-16T01:49:31+08:00
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0
ChatGPT:
根据您提供的构建日志,看起来构建是成功的,并且生成了 JAR 文件。因此,问题可能不在于依赖没有打包进来。
为了确认依赖是否正确打包进 JAR 文件,您可以执行以下步骤:
打开生成的 JAR 文件:您可以使用压缩工具(如 WinRAR 或 7-Zip)打开 D:\IDEA\Others\target\Others-1.0-SNAPSHOT.jar 文件,然后查看其中是否包含依赖 JAR 文件。如果依赖正确打包进来,您应该能够在 JAR 文件的根目录下看到 lib 文件夹,其中包含所有的依赖 JAR 文件。
验证 Classpath:确保 JAR 文件的 META-INF/MANIFEST.MF 文件中正确设置了 Classpath,以包含依赖 JAR 文件。在构建日志中没有看到关于 Classpath 的信息,因此需要手动验证。
 ##### 使用压缩工具打开 JAR 文件。
 ##### 找到 `META-INF/MANIFEST.MF` 文件。
 ##### 检查 `Class-Path` 部分,确保它包含了依赖 JAR 文件的路径。
如果 JAR 文件包含了依赖并且 Classpath 配置正确,那么依赖应该能够在运行时正确加载。如果问题仍然存在,请提供更多关于您的项目结构和代码的详细信息,以便我能够更深入地了解问题所在。

没有lib文件夹,也没有Classpath
ChatGPT:
如果您的 JAR 文件没有包含依赖的 JAR 文件或没有 Classpath 信息,那么问题可能是在打包配置中出现了问题。
在 Maven 中,您可以使用 Maven 插件来创建可运行的 JAR 文件,以确保依赖正确打包进来并配置了 Classpath。为此,您可以使用 maven-shade-plugin 插件。
请按照以下步骤配置 maven-shade-plugin
pom.xml 中添加 maven-shade-plugin 插件的配置:
xml 复制代码
<build>
    <plugins>
        <!-- 其他插件配置 -->

        <!-- 配置maven-shade-plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version> <!-- 使用最新版本的 maven-shade-plugin -->
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <!-- 设置主类 -->
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>您的主类</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
确保将 <mainClass>您的主类</mainClass> 替换为您的主类的完整路径。
执行 Maven 构建:
bash 复制代码
mvn clean package
这将使用 maven-shade-plugin 打包您的项目,并生成包含依赖和正确配置 Classpath 的可运行 JAR 文件。
验证生成的 JAR 文件:
再次使用压缩工具打开生成的 JAR 文件,并检查是否包含依赖 JAR 文件以及是否配置了 Classpath。如果一切正常,您的 JAR 文件应该已经包含依赖并设置了 Classpath。
通过这种方式,您可以确保依赖正确地打包进 JAR 文件,以便在运行时能够正确加载。

有其他方法吗
ChatGPT:
除了使用 maven-shade-plugin 插件外,还有其他一些方法可以将依赖项打包到可运行的 JAR 文件中:
使用 Maven Assembly 插件 :Maven 提供了 maven-assembly-plugin 插件,它允许您配置自定义的 JAR 打包组装。您可以定义一个包含依赖的组装描述文件,然后使用该插件来创建可运行的 JAR 文件。以下是一个示例 maven-assembly-plugin 的配置:
xml 复制代码
<build>
    <plugins>
        <!-- 其他插件配置 -->

        <!-- 配置maven-assembly-plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version> <!-- 使用最新版本的 maven-assembly-plugin -->
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
这将创建一个包含所有依赖项的 JAR 文件。
使用 Spring Boot :如果您的项目是基于 Spring Boot 构建的,Spring Boot 提供了内置的方式来创建可执行的 JAR 文件,其中包括依赖项。Spring Boot 使用 spring-boot-maven-plugin 插件来完成这个任务。
如果您的项目可以迁移到 Spring Boot,那么它会自动处理依赖项的打包和配置 Classpath。
手动构建可运行的 JAR 文件:您也可以手动创建可运行的 JAR 文件。这涉及到创建一个包含所有依赖项的目录结构,并编写一个启动脚本,以便在运行时将依赖项添加到 Classpath。这种方法相对复杂,但可以更精确地控制 JAR 文件的构建过程。
无论您选择哪种方法,确保在生成的 JAR 文件中包含了依赖项,并且配置了正确的 Classpath,以便在运行时能够正确加载依赖项。

这个不用设置主类吗
ChatGPT:
对于使用 maven-assembly-plugin 或 Spring Boot 的方法,不需要显式设置主类,因为这些插件会自动处理可执行 JAR 的配置。这些插件会在生成的 JAR 文件的清单(MANIFEST.MF)中添加必要的信息,包括主类的指定。
对于 maven-assembly-plugin,使用 descriptorRef 设置为 "jar-with-dependencies" 时,插件会自动查找项目的主类并将其添加到清单中。
对于 Spring Boot,Spring Boot 插件会自动检测项目的主类(通常是带有 public static void main 方法的类)并设置清单中的 Main-Class 属性。
如果您使用这些方法,只需确保项目的结构和配置正确,插件将自动处理主类和依赖项。这减少了手动配置的需要。

如果我想手动设置呢
ChatGPT:
如果您想手动设置主类,您可以在 Maven 插件配置中的 <configuration> 部分添加 mainClass 元素,显式指定主类的完整类名。以下是手动设置主类的示例配置:
xml 复制代码
<build>
    <plugins>
        <!-- 其他插件配置 -->

        <!-- 配置maven-assembly-plugin,手动设置主类 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version> <!-- 使用最新版本的 maven-assembly-plugin -->
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <!-- 手动设置主类 -->
                        <archive>
                            <manifest>
                                <mainClass>com.example.MainClass</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
请将 <mainClass> 元素中的 com.example.MainClass 替换为您的主类的完整类名。这样配置后,插件将在生成的 JAR 文件的清单中设置指定的主类。
请注意,手动设置主类时,确保指定的类包含 public static void main(String[] args) 方法,否则 JAR 文件将无法正常运行。

为什么会生成两个jar包
ChatGPT:
在 Maven 项目中生成两个 JAR 包通常是由于配置文件中存在多个 Maven 插件引发的。请检查您的 Maven 项目配置文件(通常是 pom.xml 文件)以查看是否存在重复的插件配置。
常见的原因之一是在 pom.xml 文件中同时配置了 maven-jar-pluginmaven-assembly-plugin,这两个插件都用于生成 JAR 文件。如果您不小心同时配置了这两个插件,它们可能都会生成 JAR 文件,从而导致生成两个 JAR 包。
请检查您的 pom.xml 文件,确保只配置了一个用于生成 JAR 文件的插件。如果需要,删除或注释掉不需要的插件配置。然后重新运行 Maven 构建命令,以确保只生成一个正确的 JAR 文件。
如果仍然存在问题,请提供您的 pom.xml 文件的内容,以便我更详细地检查并提供帮助。

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>Others</groupId>
 <artifactId>Others</artifactId>
 <version>1.0-SNAPSHOT</version>

 <properties>
     <java.version>1.8</java.version>

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

 <dependencies>

     <dependency>
         <groupId>cn.hutool</groupId>
         <artifactId>hutool-all</artifactId>
         <version>5.8.16</version>
     </dependency>

     <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>easyexcel</artifactId>
         <version>3.0.5</version>
         <!--            <exclusions>-->
         <!--                <exclusion>-->
         <!--                    <groupId>org.slf4j</groupId>-->
         <!--                    <artifactId>slf4j-api</artifactId>-->
         <!--                </exclusion>-->
         <!--            </exclusions>-->
     </dependency>

     <!--Jsoup解析网页-->
     <dependency>
         <groupId>org.jsoup</groupId>
         <artifactId>jsoup</artifactId>
         <version>1.10.2</version>
     </dependency>

     <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>fastjson</artifactId>
         <version>1.2.41</version>
     </dependency>

     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <version>1.18.22</version>
     </dependency>

 </dependencies>

 <build>
     <plugins>
         <!-- 配置maven-assembly-plugin,手动设置主类 -->
         <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-assembly-plugin</artifactId>
             <version>3.3.0</version> <!-- 使用最新版本的 maven-assembly-plugin -->
             <executions>
                 <execution>
                     <phase>package</phase>
                     <goals>
                         <goal>single</goal>
                     </goals>
                     <configuration>
                         <descriptorRefs>
                             <descriptorRef>jar-with-dependencies</descriptorRef>
                         </descriptorRefs>
                         <!-- 手动设置主类 -->
                         <archive>
                             <manifest>
                                 <mainClass>HtmlParseUtil</mainClass>
                             </manifest>
                         </archive>
                     </configuration>
                 </execution>
             </executions>
         </plugin>
     </plugins>
 </build>

</project>
ChatGPT:
根据您的 pom.xml 文件,您配置了 maven-assembly-plugin 插件来生成一个包含依赖的可执行 JAR 文件,并设置了主类为 HtmlParseUtil。这个配置是正确的,它应该生成一个包含依赖的 JAR 文件,其中包含了您的主类。
但是,如果您看到生成了两个 JAR 文件,一个是原始的 JAR 文件,另一个是包含依赖的 JAR 文件,那么可能是因为 Maven 默认情况下会同时生成原始 JAR 文件和附加的 JAR 文件。原始 JAR 文件没有依赖项,而附加的 JAR 文件包含依赖项。
您可以尝试在 maven-assembly-plugin 插件的配置中指定生成的 JAR 文件名称,以避免生成原始 JAR 文件。例如,将 finalName 设置为与附加的 JAR 文件相同的名称:
xml 复制代码
<build>
    <plugins>
        <!-- 配置maven-assembly-plugin,手动设置主类 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <finalName>${project.build.finalName}</finalName>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <!-- 手动设置主类 -->
                        <archive>
                            <manifest>
                                <mainClass>HtmlParseUtil</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
这将确保只生成附加的 JAR 文件,并且其名称将与项目的最终名称相匹配。
请尝试修改配置并重新运行 Maven 构建,查看是否只生成一个包含依赖的 JAR 文件。

相关推荐
Allen Bright2 小时前
maven概述
java·maven
hunteritself14 小时前
ChatGPT高级语音模式正在向Web网页端推出!
人工智能·gpt·chatgpt·openai·语音识别
丁总学Java17 小时前
Maven项目打包,com.sun.tools.javac.processing
java·maven
Doker 多克17 小时前
Spring AI 框架使用的核心概念
人工智能·spring·chatgpt
疯一样的码农20 小时前
Apache Maven简介
java·maven·apache
曼城周杰伦21 小时前
自然语言处理:第六十二章 KAG 超越GraphRAG的图谱框架
人工智能·pytorch·神经网络·自然语言处理·chatgpt·nlp·gpt-3
Lucky me.1 天前
本地maven添加jar包
okhttp·maven·jar
疯一样的码农1 天前
Apache Maven 标准文件目录布局
java·maven·apache
爱技术的小伙子1 天前
【ChatGPT】ChatGPT在多领域知识整合中的应用
chatgpt
学习前端的小z1 天前
【AIGC】如何准确引导ChatGPT,实现精细化GPTs指令生成
人工智能·gpt·chatgpt·aigc