在NetBeans 8中,在基于Maven的项目中,如何在编程时使用jar但是从构建中省略?
我需要访问JDBC网络应用中特定Vaadin驱动程序中的某些特定类。但是在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>
新个人资料?
关于问题的{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的基础知识。如果采用这种方法,那么如果有人可以扩展所需的细节和步骤,将会很有帮助。
答案 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>