我使用eclipse:eclipse
目标来生成Eclipse Project环境。部署工作正常。目标为所有需要的依赖项创建var类路径条目。
使用m2eclipse
,Maven容器为我定义了导出文件夹WEB-INF/lib
。但我不想依赖m2eclipse
所以我不再使用它了。
由eclipse:eclipse
目标生成的类路径条目没有这样的导出文件夹。
在使用WTP引导servlet容器时,它会将除库之外的所有资源和类发布到上下文中。
发布所需的库缺少什么,或者如果没有m2eclipse集成则不可能?
环境
maven-eclipse-plugin配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8</version>
<configuration>
<projectNameTemplate>someproject-[artifactId]</projectNameTemplate>
<useProjectReferences>false</useProjectReferences>
<downloadSources>false</downloadSources>
<downloadJavadocs>false</downloadJavadocs>
<wtpmanifest>true</wtpmanifest>
<wtpversion>2.0</wtpversion>
<wtpapplicationxml>true</wtpapplicationxml>
<wtpContextName>someproject-[artifactId]</wtpContextName>
<additionalProjectFacets>
<jst.web>2.3</jst.web>
</additionalProjectFacets>
</configuration>
</plugin>
生成的文件
执行eclipse:eclipse
目标后,依赖模块未列在我生成的.settings/org.eclipse.wst.common.component
中,因此在服务器启动时我会错过这些依赖项。
这就是我得到的:
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="someproject-core">
<wb-resource deploy-path="/" source-path="src/main/java"/>
<wb-resource deploy-path="/" source-path="src/main/webapp"/>
<wb-resource deploy-path="/" source-path="src/main/resources"/>
</wb-module>
</project-modules>
即将推出的读者的更新
此处的问题是偏离packaging
- 类型,如果您使用maven-eclipse-plugin
,请验证<packaging>war</packaging>
或ear
的使用情况。
以下问题标志着我在一个maven pom中有两个构建生命周期的情况。
答案 0 :(得分:4)
发布所需的库缺少什么,或者如果没有m2eclipse集成则不可能?
我不确定是否明白这个问题。我在很长一段时间内成功使用了maven-eclipse-plugin
和maven webapps。那么,服务器上的部署是否有效?应用程序是否可用?你能说清楚吗?
为了以防万一,我使用您的插件配置对新创建的webapp进行了快速测试,看起来没问题。我刚删除了jst.java
方面并改为配置了maven-compiler-plugin
:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<target>1.5</target>
<source>1.5</source>
</configuration>
</plugin>
我添加了对log4j
的依赖。然后,当我运行mvn eclipse:eclipse
时,这就是我在生成的.settings/org.eclipse.wst.common.component
中获得的内容:
<project-modules id="moduleCoreId" project-version="2.0">
<wb-module deploy-name="example-mvn-Q2713648">
<property name="context-root" value="example-mvn-[artifactId]"/>
<wb-resource deploy-path="/" source-path="src/main/webapp"/>
<property name="java-output-path" value="/target/classes"/>
<dependent-module archiveName="log4j-1.2.14.jar" deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar">
<dependency-type>uses</dependency-type>
</dependent-module>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
</wb-module>
</project-modules>
log4j
依赖关系在那里并被发布。我错过了什么?
更新:我将提供的pom粘贴到我的war
项目中,将其更改为使用eclipse插件的2.8版并从src/main/webapp
中删除resources
} element(它不是资源)这是我在运行mvn eclipse:eclipse
时得到的:
<project-modules id="moduleCoreId" project-version="2.0">
<wb-module deploy-name="example-mvn-Q2713648">
<property name="context-root" value="example-mvn-[artifactId]"/>
<wb-resource deploy-path="/" source-path="src/main/webapp"/>
<property name="java-output-path" value="/target/classes"/>
<dependent-module archiveName="hsqldb-1.8.0.10.jar" deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/hsqldb/hsqldb/1.8.0.10/hsqldb-1.8.0.10.jar">
<dependency-type>uses</dependency-type>
</dependent-module>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
</wb-module>
</project-modules>
对我来说很好。
更新2:正如我在对您自己的回答的评论中写的那样,我认为eclipse插件不会为包含类型为{{1}的包装的项目生成动态Web模块}。如果您更改包装jar
,它应该按预期运行。我很确定这是你麻烦的原因。
答案 1 :(得分:0)
除了原来的pom.xml
之外,我已经删除了约60个依赖项。您只需要创建webapp-archetype
并将pom粘贴到生成的(通过archetype命令)
mvn archetype:create
-DgroupId=example
-DartifactId=mvn
-DarchetypeArtifactId=maven-archetype-webapp
此eclipse:eclipse
导致生成的.settings/org.eclipse.wst.common.component
现在显示project-version="2.0"
(在我做了1.0到1.5和2.0的各种更改之后),但仍然缺少<dependent-module>
<project-modules id="moduleCoreId" project-version="2.0">
<wb-module deploy-name="example-mvn-mvn">
<wb-resource deploy-path="/" source-path="src/main/webapp"/>
<wb-resource deploy-path="/" source-path="src/main/resources"/>
</wb-module>
</project-modules>
更新 (@ Pascal Thivent):这是一个好点。我们的项目(一个网络框架)实际上有两个混合的功能。有jar-packaging
用于提供框架功能,而运行它会将自身扩展到webapp结构(WEB-INF/...)
但是也应该可以在servlet容器本身上运行带有扩展的框架,因此我们可以开发基本功能而不将其打包为jar并将其与自定义项目一起使用。所以jar
在这里是正确的。
更新2
maven-eclipse-plugin
的{{3}}表明这是硬编码的,除了将packaging
设置为war
之外,没有办法遇到then子句,或者我是想念什么? :(
private void writeModuleTypeComponent( XMLWriter writer, String packaging,
File buildOutputDirectory, EclipseSourceDir[] sourceDirs,
ArtifactRepository localRepository)
{
if ( Constants.PROJECT_PACKAGING_WAR.equalsIgnoreCase( packaging ))
{
// Adding the <dependent-modules> stuff
}
}