在基于 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
标签
我尝试将exclusions
和exclusion
标签添加到我的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】:<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>
【讨论】:
感谢您(以及 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 的项目中,在编程和编译时包含一个库,但从构建中排除的主要内容,如果未能解决你的问题,请参考以下文章
在 netbeans 7 中,如何在构建 maven 项目时跳过测试并添加 maven 附加参数?
在 NetBeans 中编译 Maven 项目时 Ant 无法找到环境变量
使用 netbeans 和 maven 创建 JApplet
NetBeans (maven) 项目:checkstyle-beans vs maven-checkstyle-plugin