- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
场景是这样的:我有一个 webapp,我想使用 tomcat-maven-plugin 的 tomcat:run goal 动态运行它。 .问题是我有许多类路径资源需要区分打包的工件和在本地工作站运行的工件。
失败的尝试:
1.) 我的第一次尝试是使用 builder-helper-maven-plugin,但它不会起作用,因为目标配置文件将(不一致地!)按照自己的方式进入打包的 WAR 存档。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>add-resource</id>
<phase>generate-resources</phase>
<goals>
<goal>add-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>${basedir}/src/main/resources-env/${testEnv}</directory>
<targetPath>${basedir}/target/classes</targetPath>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
2.) 我的第二次尝试是将文件夹(因为要部署的文件也不存在于 Tomcat 的类路径中)添加到 -Djava.ext.dirs,但它没有效果(我实际上怀疑此 systemProperties
元素配置错误或根本不工作)。见:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.0-beta-1</version>
<configuration>
<tomcatWebXml>${basedir}/src/main/mock/web.xml</tomcatWebXml>
<systemProperties>
<property>
<name>java.ext.dirs</name>
<value>${basedir}/src/main/resources-env/${testEnv}</value>
</property>
</systemProperties>
<path>/licensing</path>
</configuration>
</plugin>
我不确定接下来要尝试什么。问题的核心似乎是这个插件中缺少类似于 Surefire 的 <additionalClasspathElement>
的东西。元素。
下一步是创建自定义 catalina.properties 并将其添加到 <configurationDir>
中吗? ?如果是这样,catalina.properties 应该是什么样子?
我理解这个问题读起来有些含糊,所以我会尝试详细说明一下。
我的 POM 使用 WAR 插件的 webResources 功能来复制一些特定于环境的配置文件,而不使用配置文件来执行此操作,方法是复制名为 /src/main/resources-env/${env}
的资源像这样:
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
...
<configuration>
...
<webResources>
<!-- Copy Environment-specific resources to classes -->
<resource>
<directory>${basedir}/src/main/resources-env/${env}</directory>
<targetPath>WEB-INF/classes</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
这会将(默认,DEV)环境资源复制到包中,目前工作正常。另请注意,b/c 这些作为包装的一部分出现,tomcat:run
他们永远不会知道目标(这是期望的,因为环境不同)。
所以问题是这样的:当动态 tomcat:run
执行时,应用程序将失败,因为它的类路径(它查看 target/classes
)将缺少所需的本地工作站环境配置文件。我需要做的就是让它们在 tomcat 的路径上,但我希望这样做而不向命令行添加任何内容,并且绝对如果有人跟进 mvn package
也不会破坏构建的完整性。而不是 clean
首先。
我希望这更清楚。
最佳答案
我可能遗漏了一些东西,但为什么不在配置文件中声明所需的依赖项并在运行 Tomcat 时使用此配置文件?我不明白为什么您需要将这些资源放在 Tomcat 的类路径级别。
更新:我正在编辑我的答案以涵盖 OP 本身回答我上述问题的评论。
You're correct, the files really need to be in the webapp classpath, not tomcat's. So how could I make a profile that activate automatically for tomcat:run but without additional cmd line args?
如果不将配置文件声明为 <activeByDefault>
,我不知道该怎么做或将其列在 <activeProfiles>
下(但这不是我想要的,我宁愿使用属性激活并调用类似 mvn tomcat:run -Denv=test
的东西,不确定为什么这是一个问题)。
And how should I "declare the dependencies" in the profile while ensuring that subsequent invocations never let them into the package WAR via a vanilla mvn package
如果前面提到的配置文件在默认情况下处于 Activity 状态,那么如果您不需要它,则需要通过调用类似 mvn package -P !profile-1
的方式将其排除。 .无法为某个特定目标神奇地停用配置文件(至少,据我所知)。
实际上,我的理解是,您在这里确实有两种不同的上下文:“测试”上下文(您希望在 WAR 中包含更多内容)和“正常”上下文(您不希望这些内容包含在 WAR 中)被包括在内)。老实说,我不知道如何在不指定任何附加参数的情况下区分这两种情况(根据上下文激活配置文件或停用配置文件)。您必须有正当理由,但正如我所说,我真的不明白为什么这是个问题。因此,配置文件可能不是适合您情况的解决方案。但我真的很想知道为什么,因为这似乎是配置文件的典型用例:)
更新 2: 阅读了您对其他答案的评论和您的更新后,我意识到我最初的理解是错误的(我以为您是在谈论 Maven 意义上的依赖关系)。但是,我仍然认为配置文件可以帮助您,例如自定义 <resources>
就像这个 blog post (这只是一种方法,在路径中使用类似 src/main/resources/${env}
的属性是另一种方法)。但这不会解决所有您的顾虑(比如不指定额外的命令行参数或自动清理目标目录)。我对此没有任何解决方案。
关于java - 使用 Maven 在 Tomcat 中动态运行 WAR,如何添加类路径条目以便只有 Tomcat 可以看到它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1923302/
我试图理解 Maven 模块和 Maven 项目之间的区别。哪一个是什么以及我应该在哪里?谢谢 最佳答案 maven 模块就像一个 maven“子项目”。一个 Maven 项目包含 1 个或多个模块。
我们目前没有自己的存储库。因此,当我们使用 Maven 构建时,它会在当前用户的主目录中创建 .m2 存储库。 现在有两个在 Maven Central 中找不到的第三方 jar。假设其中之一是 ha
我有 Maven 项目,但在其中一台服务器上我必须在没有 Maven 的情况下构建它。 可以使用标准 JDK 命令。在哪里可以看到 Maven 在构建项目时向 JDK 发送了哪些命令? 最佳答案 Ma
我打算将 ImageJ 用于 web 应用程序,但似乎 ImageJ maven 依赖项不在中央 maven 存储库中。 我说得对吗? 当 ImageJ 2.x 发布时,这会改变吗? 最佳答案 您可以
我可以有多个 Maven 实例吗,即 Mave 2.2.1 和 Maven 3 都指向同一个本地存储库? 我的意思是我知道我可以在技术上将每个 settings.xml 指向同一个文件夹,但从长远来看
我有两个项目,项目 A 依赖于项目 B,所以通常,我的 projectA/pom.xml 中有以下部分: projectB blabla version1 我想要实现的目标非常简
在网上的许多地方,我看到它讨论了要使 maven 构建可重现,明确指定所有使用的插件的版本号很重要,这样更新的插件就不会破坏构建。推荐的方法似乎是使用 enforcer 插件。下面是我在网上找到的复制
有没有办法暂停 Maven 执行流程以提供命令提示符,以便用户可以输入文本。 然后我希望将提供的文本存储在 Maven 属性中。 如果用户输入可以被屏蔽,那将是一个奖励。 这对于避免在 pom.xml
我正在尝试使用 maven 插件将 maven java 项目的源文件夹添加到 Eclipse。 尝试使用 org.codehaus.mojo 插件时,我收到以下错误 无法在项目应用程序框架上执行目标
我有两个几乎相同的配置文件。我不想在每个配置文件中复制配置,而是希望一个配置文件从另一个配置文件“继承”,但我没有看到使用 maven 3 执行此操作的明显方法。 在 Maven 中是否可以继承配置文
我是 Maven 新手,花了大约 3 天的时间使用程序集插件生成 zip 文件,引用 http://www.petrikainulainen.net/programming/tips-and-tric
想象一下这种情况。我有一个使用 Maven 管理的开源项目,它依赖于一个不在 Maven 存储库中的知名库(例如 jpathwatch)。我怎样才能让它发挥作用? 直接的方法是将 jpathwatch
我将 Neo4j 和 MongoDB 与 Grails 一起使用,我想知道 Maven Neo4j 插件是否也为我的构建提供了 Neo4j 依赖项。 MongoDB 也是如此。 我很困惑。我应该使用什
我正在尝试同时发布多个 Maven 项目,将它们部署到 oss.sonatype.org,然后将它们发布到 Maven Central。 我有一个构建 pom,用于一起构建多个多模块项目。构建 pom
我有一个带有 maven pom.xml 的项目 4.0.0 Minimal-J Minimal-J 0.1-SNAPSHOT Minimal-J
我需要制作一个下载maven项目并打印其依赖项的小程序 像这样: MavenArtifactRepository repository = new MavenArtifactRepository("t
我有一个关于 maven 在构建过程中如何计算类路径的问题。具体来说,控制何时使用“目标/类”以及何时使用来自存储库(本地/远程)的“jar”。 我有一个版本为 1.0.0-SNAPSHOT 的项目,
我有一个 maven 项目,需要在命令行(-Dmy.property=val)设置一个属性。 我需要做的是将该字符串转换为所有大写,因为该属性是 用于通过 maven-resources-plugin
引用和转义如何对传递给 Maven 插件的参数起作用? 例如,我想将多个文件名作为参数传递给 Maven Exec 插件运行的应用程序: mvnDebug exec:java -Dexec.mainC
我在父 pom 的导入的 dependencyManagement 部分中指定了一个库版本。我确认我的有效 pom 只有一次出现这种依赖。它在依赖管理部分: org.jav
我是一名优秀的程序员,十分优秀!