我想将包含API的外部.jar添加到使用NetBeans中的模板maven-web应用程序创建的项目中。 似乎在使用此类模板创建的项目中,Libraries文件夹不存在(如果您转到项目属性并且查看项目文件结构,则无法找到它。)
我设法通过将jar复制到项目中并像这样编辑pom.xml文件来添加库:
<dependency> <groupId>Bbg</groupId> <artifactId>BbgAPI</artifactId> <scope>system</scope> <version>1.0</version> <!-- <systemPath>C:\blp\BPipe\APIv3\JavaAPI\v3.7.1.1\bin\blpapi3.jar</systemPath> --> <systemPath>${basedir}\lib\blpapi3.jar</systemPath> </dependency>
代码编译文件,但我在运行时收到错误:
java.lang.NoClassDefFoundError:com / bloomberglp / blpapi / SessionOptions
我的猜测是JVM无法在类路径中找到类定义。 通常,在NetBeans中将外部库添加到标准Java项目时(通过“项目属性”中的“库”部分),类路径会自动更新,但在这种情况下(通过手动编辑pom.xml),似乎没有发生这种情况。 / p>
您知道如何修补类路径以使类在运行时可见吗? 一般来说,你知道为什么这个项目模板不允许以标准方式添加外部库吗?
由于
答案 0 :(得分:3)
因此,在按照this post的说明进行检查后,要将依赖项添加到项目中,您仍然需要做一些事情。如果您只是像这样构建项目,那么您会注意到,如果您在“文件”窗口中查看项目,那就是您的jar不在那里。
要将广告罐复制到某个位置,您应该使用maven-dependency-plugin。像
这样的东西<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
执行此操作,您应该会在lib
目录中的target
中看到相关性
然后要设置类路径,请使用maven-jar-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.5</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>test.app.main.TestClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
执行此操作,您是否看到了MANIFEST
,您应该会看到lib/yourDepenendency.jar
属性中添加了Class-Path
。你应该能够运行jar
项目的“文件”视图。 test-app-main
是主要的Maven项目。我主要是一个简单的java项目test-app
,我在其中创建了一个jar。
如果要在主分发jar中包含其他jar中的类,则需要一个类似maven-assembly-plugin或maven-shade-plugin的插件
执行以下操作并构建项目应该使jar “可用”用于webapp
这样做,一旦你构建它,jar应该在WEB-INF/libs
中可用于webapps的位置
请记住,当这样做的时候,你需要确保你试图使用的罐子不依赖于任何其他罐子