我一直在努力用Maven生成一个可执行的jar文件。我包含了一个单独的sqljdbc.jar
文件,并将其放在/lib
文件夹中,该项目无错误且可在Eclipse或IntelliJ中运行。
但是在使用Maven时,我使用以下内容生成了jar
文件:
mvn clean package
并使用以下代码运行它:
java -jar target/etl-aggregation-0.0.1-SNAPSHOT.jar
并收到以下消息:
ClassNotFoundException e : java.lang.ClassNotFoundException:
com.microsoft.sqlserver.jdbc.SQLServerDriver null
我尝试过多种方法,例如How can I create an executable JAR with dependencies using Maven?,但仍然无法解决问题。
这是我的pom.xml
文件的构建部分:
<build>
<resources>
<resource>
<directory>${project.basedir}</directory>
<includes>
<include>lib/*.jar</include>
</includes>
</resource>
</resources>
<plugins>
<!-- download source code in Eclipse, best practice and i don't know its usage here..-->
<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>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
</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>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.etl_aggregation.app.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!-- Maven Assembly Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<!-- get all project dependencies -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- MainClass in mainfest make a executable jar -->
<archive>
<manifest>
<mainClass>com.etl_aggregation.app.App</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!-- bind to the packaging phase -->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
问题已解决
我手动添加了-cp lib/sqljdbc4.jar
来运行jar
,但它确实有效。
答案 0 :(得分:0)
以前我认为让它工作的是执行以下命令,在这种情况下,我认为我手动将sqljdbc4.jar
依赖项添加到类路径...
java -cp lib/sqljdbc4.jar -jar target/etl-aggregation-0.0.1-SNAPSHOT.jar
但实际发生的事情是Run a JAR file from the command line and specify classpath,程序运行的原因是我还在我的sqljdbc4.jar
存储库中手动添加了.m2
依赖项
mvn install:install-file -Dfile=lib/sqljdbc4.jar -DgroupId=com.microsoft.sqlserver \
-DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar
所以程序就像@Rajith Pemabandu建议的那样。