Java 使用依赖项和测试在Maven中生成jar文件
我在pom.xml中使用这段代码来创建一个jar文件Java 使用依赖项和测试在Maven中生成jar文件,java,maven,jar,pom.xml,Java,Maven,Jar,Pom.xml,我在pom.xml中使用这段代码来创建一个jar文件 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <excludes> <
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/log4j.properties</exclude>
</excludes>
<archive>
<manifest>
<mainClass>test.LeanFTest</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
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>groupId</groupId>
<artifactId>LeanFT</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Mytest</name>
<description>Regression test</description>
<properties>
<leanftsdk>C:/Program Files (x86)/HPE/Unified Functional Testing/SDK/Java/</leanftsdk>
<maven.test.skip>true</maven.test.skip>
</properties>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>com.hp.lft</groupId>
<artifactId>sdk</artifactId>
<version>14.0.0</version>
<scope>system</scope>
<systemPath>${leanftsdk}/com.hp.lft.sdk-standalone.jar</systemPath>
</dependency>
<dependency>
<groupId>com.hp.lft</groupId>
<artifactId>report</artifactId>
<version>14.0.0</version>
<scope>system</scope>
<systemPath>${leanftsdk}/com.hp.lft.report.jar</systemPath>
</dependency>
<dependency>
<groupId>com.hp.lft</groupId>
<artifactId>unittesting</artifactId>
<version>14.0.0</version>
<scope>system</scope>
<systemPath>${leanftsdk}/com.hp.lft.unittesting.jar</systemPath>
</dependency>
<dependency>
<groupId>com.hp.lft</groupId>
<artifactId>verifications</artifactId>
<version>14.0.0</version>
<scope>system</scope>
<systemPath>${leanftsdk}/com.hp.lft.verifications.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>appmodels</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>test.LeanFTest</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
</project>
4.0.0
groupId
利恩夫特
1.0-快照
罐子
我的测试
回归试验
C:/ProgramFiles(x86)/HPE/Unified Functional Testing/SDK/Java/
真的
log4j
log4j
1.2.17
org.testng
testng
6.14.3
编译
org.hamcrest
汉克雷斯特岩芯
1.3
公地io
公地io
2.6
com.hp.lft
sdk
14.0.0
系统
${leanfsdk}/com.hp.lft.sdk-standalone.jar
com.hp.lft
报告
14.0.0
系统
${leanfsdk}/com.hp.lft.report.jar
com.hp.lft
单元测试
14.0.0
系统
${leanfsdk}/com.hp.lft.unittesting.jar
com.hp.lft
核实
14.0.0
系统
${leanfsdk}/com.hp.lft.verifications.jar
org.apache.maven.plugins
maven编译器插件
1.7
1.7
org.codehaus.mojo
构建助手maven插件
1.10
添加源
生成源
添加源
应用模型
maven汇编插件
test.leanfest
带有依赖项的jar
org.apache.maven.plugins
maven surefire插件
真的
要创建uber jar(如评论中所述),可以使用插件。这个插件将生成一个JAR,其中包含项目类以及依赖JAR中的所有类
注意:带有预定义的带有依赖项的
jar
的Maven assembly插件将在未分类的jar旁边生成一个带有固定分类器(jar with dependencients
)的uber jar。似乎不可能覆盖它(除了定义自定义程序集之外)。我的解决方案是构建一个存档(zip或其他格式),其中包含jar中的类、依赖项jar、一个包含运行时配置文件和脚本的文件夹,以启动应用程序。其作用范围是只需解压缩归档文件,即可获得一个可运行的应用程序
构建的存档内容是:
artifactId-version.zip:
<artifactId folder>
├─ config
| ├─ log4j2.xml
├─ lib
| ├─ <all dependencies jars>
├─ leanft.cmd
├─ leanft.sh
└─ artifactId-version.jar
您需要在maven程序集插件中指定执行阶段。使用以下maven程序集插件配置
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>test.LeanFTest</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
maven汇编插件
test.leanfest
带有依赖项的jar
包裹
单一的
现在只需在project pom.xml(根目录)上运行
mvn包
,您就可以通过artifactId加上“jar with dependencies”后缀获得一个完全组装好的jar @SagarRohankar可能重复:看起来不一样。@plaidshirt请完整描述项目结构并发布所有pom.xml文件。另外,放置控制台输出以查看何时抛出此错误消息。@catta:我更新了我的问题。@plaidshirt请将pom.xml内容和控制台输出与错误一起放置。我将Maven Shade插件添加到pom.xml
,但在尝试使用生成的jar文件时,收到另一条错误消息:线程“main”中的异常java.lang.NoClassDefFoundError:javax/jms/JMSException
,它似乎是JEE的一部分,并且似乎不包含在依赖项中。你可能想把它包括在内。请参阅,例如,对于我不确定的正确工件,如果缺少依赖项,为什么直接从IDE执行成功。也许IDE中的类路径设置与pom不完全匹配?e、 g.Eclipse维护一个单独的类路径定义,其中包括(如果使用Maven插件)pom中的所有DEP,仍然可以选择其他项(例如,服务器运行时,其中将包含代码JEE类)。在尝试使用jar文件后,我收到错误消息:线程“main”中的异常java.lang.NoClassDefFoundError:javax/jms/JMSException
我使用HP TestExportTool来执行它:java-jar-classpath:‑framework:TestNG
此代码生成了一个包含jar的单独的lib文件夹和一个包含lib命名文件夹和jar文件的zip文件。难道不可能将其生成为单个jar文件吗?@plaidshirt我必须研究是否可以使用此解决方案生成一个uber jar,但我的问题是,您为什么需要这样的解决方案?为什么所有东西都在里面的zip对您不好?我看到HP TestExportTool无法处理这个问题,这就是为什么我需要一个单一的jar解决方案。
artifactId-version.zip:
<artifactId folder>
├─ config
| ├─ log4j2.xml
├─ lib
| ├─ <all dependencies jars>
├─ leanft.cmd
├─ leanft.sh
└─ artifactId-version.jar
<maven_module_root>
├─ src
| ├─ main
| | ├─ assembly
| | | ├─ leanft-assembly.xml
| | ├─ java
| | | ├─ <your classes content>
| | ├─ resources
| | | ├─ log4j2.xml
| | | ├─ <your runtime configuration files>
| | ├─ scripts
| | | ├─ leanft.cmd
| | | ├─ leanft.sh
│ └───test
├─ pom.xml
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>dist</id>
<formats>
<!-- <format>tar.gz</format> -->
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<baseDirectory>${project.artifactId}</baseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>${project.artifactId}-${project.version}.jar</include>
</includes>
</fileSet>
<fileSet>
<directory>${project.build.directory}/lib</directory>
<outputDirectory>/lib</outputDirectory>
<includes>
<include>*.*</include>
</includes>
</fileSet>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory>/config</outputDirectory>
<includes>
<include>log4j2.xml</include>
</includes>
</fileSet>
<fileSet>
<directory>${project.basedir}/src/main/scripts</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>leanft.*</include>
</includes>
</fileSet>
</fileSets>
</assembly>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteIfNewer>true</overWriteIfNewer>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>test.LeanFTest</mainClass>
</manifest>
</archive>
<excludes>
<exclude>log4j2.xml</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<finalName>${project.artifactId}-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/leanft-assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
%JAVA_HOME%\bin\java %JVM_ARGS% -cp %SCRIPT_DIR%\*;%SCRIPT_DIR%\config\ test.LeanFTest
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>test.LeanFTest</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>