我有一个Java项目Foo,它依赖于bar。jar及其maven构建如下所示:
--福/
----foo.jar
----lib/
------酒吧。罐子
------(其他自由罐)
福娃。jar的舱单。MF具有字段类路径:。lib/bar。罐子(其他库jar)
和Main类:com。美国广播公司。福。Main
并且可以通过命令java-jarfoo调用它。jar
酒吧。jar是从另一个依赖于httpclient-4.5的Java项目栏创建的。罐子
所以问题是,当发布包含bar的Foo构建时。jar已经在它的子文件夹库中了,我是否需要包含httpclient-4.5。还有罐子吗?
更新:我发现我想问的真正问题是关于传递依赖。根据https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies,Maven能够发现您自己的lib所需的lib(依赖)。
在我的例子中,Maven可以计算出foo依赖于bar和bar依赖于httpclient-4.5.jar,它将httpclient-4.5.jar到Project Foo的Maven依赖列表。
这适用于我的项目中的大多数依赖项,即依赖项的依赖项也出现在我的Maven依赖项中。但是,有一个依赖项(bar.jar)Maven无法检索它的依赖项(httpclient-4.5.jar)。这是我现在面临的关键问题。
您可以使用maven assembly插件,您可以为您的java项目构建一个捆绑包zip。
例如
在pom.xml
<dependencies>
<!-- foo dependencies -->
<dependency>
<groupId>com.company.bar</groupId>
<artifactId>bar</artifactId>
<version>1.0.0-RELEASE</version>
</dependency>
</dependencies>
<build>
<finalName>foo</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>../lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Build-Time>${maven.build.timestamp}</Build-Time>
<Build-Host>${agent.name}</Build-Host>
<Build-User>${user.name}</Build-User>
<Build-Maven>Maven ${maven.version}</Build-Maven>
<Build-Java>${java.version}</Build-Java>
<Build-OS>${os.name}</Build-OS>
<Build-Label>${project.version}</Build-Label>
<Build-Path>${basedir}</Build-Path>
<Build-Number>${buildNumber}</Build-Number>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<executions>
<execution>
<id>distro-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/asembly/asembly.xml</descriptor>
</descriptors>
<!-- <finalName>${project.artifactId}-${project.version}.jar</finalName> -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
您必须在asembly中给出它在捆绑包中的规格。xml
<?xml version="1.0" encoding="UTF-8"?>
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly- plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>dist</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>target</directory>
<outputDirectory>./bin/</outputDirectory>
<includes>
<include>foo.jar</include>
</includes>
</fileSet>
<fileSet>
<includes>
<include>readme.txt</include>
</includes>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>/lib/</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<unpack>false</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
当您执行mvn clean install时,那么在目标文件夹中,捆绑包必须显示为foo-dist.zip
在zip中,您将在/lib文件夹栏中找到它。jar和在forlder/bin-foo中声明为依赖项的每个其他jar。罐子
我下载了一个Maven项目,可以运行来构建目标helloworld。jar,它依赖于多个第三方运行时jar。但是,我不知道如何使用Maven将这些第三方JAR自动复制到特定目录中。查看pom。xml,我发现了以下语句。因此,基本上我希望将第三方JAR复制到。要做到这一点,我应该使用哪个maven插件/短语/目标?有人能给我看一个可运行的maven语法吗?谢谢
我正试图用下面的“为Android设置Firebase实时数据库”的例子写入我的数据库,但应用程序在启动时崩溃。 似乎是因为依赖: 我的应用程序Build.Gradle: 如何解决此问题?
我将描述我的CMake项目目前是如何安排的。现在还早,所以欢迎提出更好的安排。 顶级 lib1 lib2 我在每个级别上都有cmakelists.txt。 在Lib1 I add_library(STATIC)中,然后使用Lib2 target_link_library,它也是静态的。 lib2的cmakelists.txt执行对Qt5Widgets、Qt5Core和qt5gui的find_pac
问题内容: 我正在通过JNI运行一个库(我没有写过),并且在内部它调用了另一个DLL。除非我将另一个DLL的路径放在系统PATH变量上(我在Windows XP上),否则我会收到一条错误消息:“找不到依赖的库”。我希望能够在Java命令行上处理此问题,并且我已经尝试将其添加到- Djava.library.path和classpath中,但都没有起作用(我希望- Djava.library.pat
添加Lib库依赖关系有两种方式: 非管理依赖方式,是通过将依赖的Jar包放到项目的lib目录 管理依赖方式,是在工程构建配置中配置依赖关系,sbt会自动从托管代码库中下载依赖库 非管理依赖方式 很多人用管理依赖的方式替代非管理方式,其实非管理方式用起来非常方便。非管理依赖方式的工作原理就是将jar包放到lib目录下,sbt会自动的将其添加到classpath中。也可以将一些测试依赖放到lib目录下
我有一个库,其中我从内部工件中排除了依赖项,当我在客户端应用程序中使用该库时,它会抛出一个java.lang.ClassNotFoundException:io.confluent.monitoring.clients.interceptor.MonitoringProducerInterceptor 如何在我的应用程序中覆盖此排除而不排除此依赖项?