编程时包括一个库&在基于NetBeans Maven的项目中编译,但从构建中排除

时间:2015-08-19 05:49:58

标签: java maven netbeans classpath netbeans-8

在NetBeans 8中,在基于Maven的项目中,如何在编程时使用jar但是从构建中省略?

我需要访问JDBC网络应用中特定Vaadin驱动程序中的某些特定类。但是在Web应用程序中,我们通常不会在构建中捆绑JDBC驱动程序(.war file)。相反,JDBC驱动程序属于由Servlet容器(运行时环境)控制的文件夹。

因此,在编辑代码和编译时,我需要JDBC驱动程序(jar文件)在classpath上。但是必须从构建中省略该jar文件。

exclusions标记

我尝试将exclusionsexclusion标记添加到我的dependency元素中。但这不起作用 - postgresql-9.4-1201.jdbc41.jar出现在WEB-INF/lib文件夹中。

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.4-1201-jdbc41</version>
    <exclusions>
        <exclusion>
            <groupId>org.postgresql</groupId>  Exclude from build 
            <artifactId>postgresql</artifactId>
        </exclusion>
    </exclusions>
</dependency>

新个人资料?

关于问题的{p> This Answer by ZNK - M Setting custom runtime classpath for a maven project in netbeans,可能就是我所需要的。

但是创建一个新的项目配置文件对我来说似乎有些过分。并且,总是想要从我的构建输出中排除这个jar,而不仅仅是在测试时或在其他有限的场景中。

  

您应该在pom中添加一个新的配置文件run-with-netbeans,声明其他依赖项(使用提供的范围在发行版中不包含它们)。

     

然后,您必须将新配置文件添加到IDE,以便在命令行中使用-P run-with-netbeans选项运行pom。

但我只熟悉编辑POM file的基础知识。如果采用这种方法,那么如果有人可以扩展所需的细节和步骤,将会很有帮助。

2 个答案:

答案 0 :(得分:1)

对此依赖项使用provided范围而不是默认的compile范围。这正是它的用途。

<dependency>
    <scope>provided</scope>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
</dependency>

答案 1 :(得分:1)

<scope>provided</scope>

在POM文件中使用<scope>标记,其值为provided

摘自页面的Dependency Scope部分,Introduction to the Dependency Mechanism

  

编译
这是默认范围,如果未指定,则使用此范围。编译依赖项在项目的所有类路径中都可用。此外,这些依赖项将传播到依赖项目。

     

提供
这与编译很相似,但表示您希望JDK或容器在运行时提供依赖关系。例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类。此范围仅在编译和测试类路径中可用,并且不可传递。

     

<强>运行时
[...]

     

<强>测试
[...]

     

<强>系统
[...]

     

导入
[...]

像这样:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.4-1201-jdbc41</version>
    <scope>provided</scope>
</dependency>