gpt4 book ai didi

java - Web 应用程序和独立 Java 应用程序的不同依赖范围

转载 作者:行者123 更新时间:2023-11-28 22:06:55 26 4
gpt4 key购买 nike

我正在使用 Maven 构建一个在 Tomcat 中运行的 Java Web 应用程序。某些 JAR 文件(例如 mail-1.4.1.jar 和数据库驱动程序)已放在 tomcat/lib 目录中,并且 Maven 依赖项设置为“已提供”。 (我不是 100% 确定为什么,但我认为这与 JNDI 有关。)

现在我已经在同一个 Maven 项目中构建了一个独立的可执行 Java 程序,我正尝试使用 mvn exec:java 来执行它。毫不奇怪,它找不到 mail.jar,我收到错误 java.lang.NoClassDefFoundError: javax/mail/Session

如何为独立 Java 程序指定 javax.mail scope="runtime",同时仍然为 Tomcat 应用程序“提供”?我必须使用 Maven 配置文件吗?如果是这样,我在哪里可以找到有关其工作原理的有用文档(配置文件的依赖项是附加的还是覆盖默认的依赖项等?)

最佳答案

Raghuram 的回答是正确的,但我想指出一点。

正如 Sonatype 在其博客中所写:http://www.sonatype.com/people/2010/01/how-to-create-two-jars-from-one-project-and-why-you-shouldnt/

I want to be very clear about this answer. We strongly recommend that you not configure a Maven project to create two separate JARs from a single project. It violates one of the most important core concepts of Maven: modularity.

你所做的似乎不符合“The Maven Way”。当您开始陷入这样的问题时,您应该始终认为这可能不是您选择的正确解决方案。

有很多关于这类问题的话题,围绕用一个 pom 处理多个 Artifact :

Handling multiple artifacts from single maven project

Maven: Attaching multiple artifacts

...

正如 Raghuram 建议的那样,关于如何处理多个环境配置文件有一个很好的方法: Maven best practice for generating artifacts for multiple environments [prod, test, dev] with CI/Hudson support?

所以,我建议你拆分你的项目,考虑它们之间的真正关系。它可能会驱使您进入像这样的多模块项目

parent
|
+--project:jar
|
+--web-app:war

...

看看这里:http://www.sonatype.com/books/mvnex-book/reference/multimodule.html

祝你好运:)

关于java - Web 应用程序和独立 Java 应用程序的不同依赖范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10912228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com