Java Maven将项目部署为Jar-缺少类定义

Java Maven将项目部署为Jar-缺少类定义,java,maven,intellij-idea,Java,Maven,Intellij Idea,我正试图从Intellij Idea中创建的maven项目中创建一个可运行的jar 我尝试通过Intellij构建工件,但没有成功。它找不到主文件 之后,我通过maven尝试了以下方法: -mvn编译 -mvn包 这将创建一个可运行的jar,该jar将执行,但稍后在解析csv时会引发异常: 线程“JavaFX应用程序线程”中出现异常 java.lang.NoClassDefFoundError:org/apache/commons/csv/CSVParser 但是它被添加到我的pom.xml中。

我正试图从Intellij Idea中创建的maven项目中创建一个可运行的jar

我尝试通过Intellij构建工件,但没有成功。它找不到主文件

之后,我通过maven尝试了以下方法: -mvn编译 -mvn包

这将创建一个可运行的jar,该jar将执行,但稍后在解析csv时会引发异常:

线程“JavaFX应用程序线程”中出现异常 java.lang.NoClassDefFoundError:org/apache/commons/csv/CSVParser

但是它被添加到我的pom.xml中。。。我下载了所有的东西,甚至是文件。我可以在外部库中看到org.apache.commons:commons csv包,但在创建jar时它似乎丢失了

<?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>
    <packaging>jar</packaging>
    <groupId>sceosa</groupId>
    <artifactId>CEO_SA_ReportingLine</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <finalName>CEOSA</finalName>
        <plugins>
            <!-- download source code in Eclipse, best practice -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>false</downloadJavadocs>
                </configuration>
            </plugin>
            <!-- Set a compiler level -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <!-- Make this jar executable -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>de.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.hsqldb/hsqldb -->
        <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->

        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>25.1-jre</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-csv</artifactId>
            <version>1.3</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

4.0.0
罐子
斯科萨
CEO_SA_ReportingLine
1.0-快照
塞奥萨
org.apache.maven.plugins
maven eclipse插件
2.9
真的
假的
org.apache.maven.plugins
maven编译器插件
2.3.2
1.8
1.8
org.apache.maven.plugins
maven jar插件
3.1.0
德梅因
org.apache.maven.plugins
maven编译器插件
3.7.0
番石榴
番石榴
25.1-jre
org.projectlombok
龙目
1.18.0
假如
org.apache.commons
公共空间
1.3
朱尼特
朱尼特
4.12
测试

有人知道pom文件或intellij有什么问题吗?

默认情况下,maven在构建JAR时不包含依赖项。只有当您以其他方式拥有依赖关系时,jar才会工作


您可以使用构建一个包含依赖项的jar。

我使用了maven shade插件,如果您想将所有依赖项捆绑到一个jar中,它非常有用。你所需要的只是插件,并从你的项目中提供主类,它应该有一个Main方法。它看起来像这样:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <shadedArtifactAttached>true</shadedArtifactAttached>
                <transformers>
                    <transformer implementation=
                      "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.test.MainClass</mainClass>
                </transformer>
            </transformers>
        </configuration>
        </execution>
    </executions>
</plugin>

org.apache.maven.plugins
maven阴影插件
    
        
            
阴影
            
            
真的
                
                    
com.test.MainClass
                
            
        
        
    

只需使用
mvn clean install
构建您的项目,您就可以在目标目录中找到jar,它的后缀是-shade.jar。希望这有帮助

您能检查一下您的.m2文件夹中是否有CSVParser.jar吗?听起来您需要使用maven插件将必要的依赖项构建到您的jar中。@TA不,这不是因为我里面有其他库,而是缺少org.apache.commons commons csv 1.3。就是那个扔硬币的人exception@vikingsteve你能进一步解释一下吗?你可能想重新考虑使用2015年不推荐使用的插件,并称之为最佳实践。该插件的网站上有一些建议,可以用什么来代替。