我想将我的项目打包在一个可执行的JAR中进行分发.
如何将所有依赖JAR的Maven项目打包到我的输出JAR中?
我对Maven的口头禅相对较新,但我正在尝试使用Maven构建一个命令行可运行的jar.我已经设置了我的依赖项,但是当我运行mvn install并尝试运行jar时,会发生两件事.首先,没有找到主类,这是可以纠正的.当我纠正这个问题时,我在运行时遇到错误,说明无法找到类.
Maven没有在jar中包装我的依赖库,所以我无法将jar作为独立的应用程序运行.我该如何纠正?
操作系统名称:"linux"版本:"2.6.32-27-generic"arch:"i386"系列:"unix"
Apache Maven 2.2.1(r801777; 2009-08-06 12:16:01-0700)
Java版本:1.6.0_20
我试图在ubuntu中使用maven与maven相关联.如果我移动maven下载到我的$ JAVA_HOME/jre/lib/ext /文件夹中的"mysql-connector-java-5.1.14.jar"文件,那么当我运行jar时一切都很好.
我想我应该只能在pom.xml文件中指定依赖项,maven应该自动设置依赖项jar的类路径.这是不正确的?
我的pom.xml文件如下所示:
<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>com.ion.common</groupId>
<artifactId>TestPreparation</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>TestPrep</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.ion.common.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- JUnit testing dependency -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- MySQL database driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.14</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
命令"mvn package"构建它没有任何问题,我可以运行它,但是当应用程序尝试访问数据库时,会出现以下错误:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at …Run Code Online (Sandbox Code Playgroud) 我有一个我用Maven制作的项目.我使用"mvn package"编译了一个JAR,现在我想运行它,最好不要设置一些疯狂的类路径,因为它依赖于Spring和一半的互联网或其他东西.有什么办法可以轻松运行吗?像"mvn run"之类的东西会很棒,或者是将所有依赖项都放入jar中的选项,所以我可以做"java -jar"也很精彩.
你是如何处理这个的,你建议做什么?因为基于〜/ .m2导出CLASSPATH可能只是伤害;-)
我使用 maven 来管理我的项目中的依赖项。这是我的 pom.xml pom.xml
<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>com.prasanna</groupId>
<artifactId>fft-java</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>fft-java</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>com.github.wendykierp</groupId>
<artifactId>JTransforms</artifactId>
<version>3.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.prasanna.TestFFT</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
我的应用程序中只有一个 java 类。当我从我的应用程序运行我的类时,它按预期运行。而如果我制作 amvn package并尝试从终端运行它 as java -jar test-fft.jar,我会得到java.lang.ClassNotFoundException: org.jtransforms.fft.DoubleFFT_2D
但是这个 DoubleFFT_2D 是我添加的 JTransforms 依赖项的一部分。我将如何运行这个罐子?
如何从src/main/resources中排除文件,例如:我有一个名为"map"的文件夹,我想保留这个文件夹,我想删除war中的所有内容(或者不要在firstplace中将其打包).
或者替代但结果相同,从src/main/resources中排除所有*.resources文件并将其他所有内容放入战争中?
谢谢