Java Maven将项目部署为Jar-缺少类定义
我正试图从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时它似乎丢失了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中。
<?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年不推荐使用的插件,并称之为最佳实践。该插件的网站上有一些建议,可以用什么来代替。