在NetBeans中的maven Web应用程序中添加外部库

时间:2014-09-24 08:07:05

标签: maven java-ee web-applications netbeans libraries

我想将包含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>

您知道如何修补类路径以使类在运行时可见吗? 一般来说,你知道为什么这个项目模板不允许以标准方式添加外部库吗?

由于

1 个答案:

答案 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。

enter image description here

如果要在主分发jar中包含其他jar中的类,则需要一个类似maven-assembly-pluginmaven-shade-plugin的插件


更新:在大多数情况下,请忽略上述所有内容。我刚刚注意到你正在创建一个webapp

执行以下操作并构建项目应该使jar “可用”用于webapp

  1. 从您的项目中,右键点击“依赖关系” - &gt; “添加依赖”
  2. 为groupId组成一个任意名称,artifactId - &gt;版本,单击确定
  3. 右键单击“Dependencies”中的jar,选择“Manually Install Artifact”。找到工件并添加它。
  4. 这样做,一旦你构建它,jar应该在WEB-INF/libs中可用于webapps的位置

    请记住,当这样做的时候,你需要确保你试图使用的罐子不依赖于任何其他罐子