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

Posted

技术标签:

【中文标题】在基于 NetBeans Maven 的项目中,在编程和编译时包含一个库,但从构建中排除【英文标题】:Include a library while programming & compiling, but exclude from build, in NetBeans Maven-based project 【发布时间】:2015-11-12 06:39:37 【问题描述】:

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

我需要在我的 Vaadin Web 应用程序中访问特定 JDBC 驱动程序中的一些特定类。但是在 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>

新个人资料?

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 的基础知识。如果这种方法是可行的方法,那么如果有人可以详细说明所需的细节和步骤,那将会很有帮助。

【问题讨论】:

【参考方案1】:

&lt;scope&gt;provided&lt;/scope&gt;

在POM文件中使用&lt;scope&gt;标签,值为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>

【讨论】:

感谢您(以及 JB Nizet)!我证实确实可以完美运行。禁用scope 标签会导致postgresql-9.4-1201.jdbc41.jar jar 文件出现在我构建的WEB-INF/lib 文件夹中。启用 scope 元素会省略 jar。 仅供参考:有关相关问题的更多讨论,What's the difference between these Maven dependency scopes: provided/compile/system/import【参考方案2】:

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

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

【讨论】:

以上是关于在基于 NetBeans Maven 的项目中,在编程和编译时包含一个库,但从构建中排除的主要内容,如果未能解决你的问题,请参考以下文章

将 maven 项目导入 netbeans

在 netbeans 7 中,如何在构建 maven 项目时跳过测试并添加 maven 附加参数?

在 NetBeans 中编译 Maven 项目时 Ant 无法找到环境变量

从命令行运行 Netbeans maven 项目?

使用 netbeans 和 maven 创建 JApplet

NetBeans (maven) 项目:checkstyle-beans vs maven-checkstyle-plugin