我正在将一个Eclipse Maven管理的webapp项目转变为一个多模块Maven项目(这是一个用Maven进行实验的测试项目,因此可以随意提供任何种类的建议)。
单个项目webapp不能有任何错误,成功编译并在部署时正确运行,所以我从一个正常工作的应用程序开始。
该应用程序有一个web部件和一个控制台部件,这意味着有些类具有<code>main()
所以,这就是我如何拆分项目:
在Eclipse内部,我现在有4个独立的项目:
shaker-multi
包含聚合器(和父)POM,以及子目录中的每个模块;振动器-多核
;shaker-多运行n able
;shaker-多Web应用程序
。在Eclipse内部,核心和webapp可以编译,后者可以部署到Tomcat实例,我可以在浏览器中看到它。
runnable出现了问题。该项目依赖于jOOQ类,因此必须生成相关的源代码。jOOQ依赖项和配置在核心/pom中。xml
(因为它们也可以在那里使用)。
当我做项目时-
Non-resolvable parent POM: Failure to find sunshine.web:shaker-multi:pom:0.0.1
这听起来很合理,因为我没有安装任何这些工件,即使在我的本地存储库中也是如此。
但当我调用Maven构建时-
我该怎么办?我的项目配置/拆分是不是完全错了?我应该用父POM添加另一个模块吗?这听起来是错误的,因为POM参考声明:
继承和聚合通过单个高级POM创建了一个很好的动态来控制构建。您经常会看到同时是父级和聚合器的项目。
我在这里完全迷失了。
我的期望:
shaker-multi-webapp
上运行Maven包
并获得可部署的战争;shaker-multi-runnable
上运行Maven包
并获取命令行runnable jar(我仍然需要配置它的POM以生成一个带有依赖项的jar,虽然,我知道);shaker-multi
上运行Maven包
并获得某种我可以移动的捆绑包,它将包含每个模块的war或jar。编辑
我补充道
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
到< code > shaker-multi-web app POM,如本答案所示,但没有区别。
编辑-2
我清除了整个本地存储库(按照此处的建议),当我重新打开Eclipse时,在Maven控制台中我看到了
[...] 05/09/14 07:58:19 CEST: [INFO] Adding source folder /shaker-multi-webapp/src/main/java 05/09/14 07:58:19 CEST: [INFO] Adding source folder /shaker-multi-webapp/src/test/java **05/09/14 07:58:19 CEST: [ERROR] Could not read web.xml** [...]
有什么提示吗?它是从哪里来的?但我无法复制它(除非再次删除我的整个本地回购协议)。
这是< code>shaker-multi POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sunshine.web</groupId>
<artifactId>shaker-multi</artifactId>
<version>0.0.1</version>
<packaging>pom</packaging>
<modules>
<module>shaker-multi-core</module>
<module>shaker-multi-runnable</module>
<module>shaker-multi-webapp</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
这是振动器多核
POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>sunshine.web</groupId>
<artifactId>shaker-multi</artifactId>
<version>0.0.1</version>
</parent>
<artifactId>shaker-multi-core</artifactId>
<packaging>jar</packaging>
<build>
<plugins>
<plugin><!-- jOOQ plugin--></plugin>
</plugins>
</build>
<dependencies>
<dependency><!-- jOOQ dependency --></dependency>
</dependencies>
</project>
这是振动筛多 webapp
POM:
xml prettyprint-override"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>sunshine.web</groupId>
<artifactId>shaker-multi</artifactId>
<version>0.0.1</version>
</parent>
<artifactId>shaker-multi-webapp</artifactId>
<packaging>war</packaging>
<build>
<plugins>
<plugin><!-- Tomcat local -->
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>sunshine.web</groupId>
<artifactId>shaker-multi-core</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<!-- JSP & Servlet dependencies -->
</dependency>
</dependencies>
</project>
这里的整个问题非常简单,我对此感到有点惭愧:但作为我第一次做多模块项目,我想这可能会发生。
当然,当您自己处理所有项目和模块源时,这里的详细信息适用:如果您在团队中,只处理项目的一部分和/或使用集中的私有存储库,则使用YMMV。
首先,在我将单个项目拆分为几个模块之后,我的Eclipse项目浏览器中出现了这种情况:
+-- shaker-multi
^--- pom.xml
^--- shaker-multi-core
^-- pom.xml
^-- (other content)
^--- shaker-multi-runnable
^-- pom.xml
^-- (other content)
^--- shaker-multi-webapp
^-- pom.xml
^-- (other content)
+-- shaker-multi-core
^-- pom.xml
+-- shaker-multi-runnable
^-- pom.xml
+-- shaker-multi-webapp
^-- pom.xml
每个 --
都是一个单独的、独立的 Eclipse 项目。它们中的每一个都已从SVN中进行了单独检查(因此,实际上,它们彼此分离)。
然后,我正在编辑一些东西 - shaker-multi-runnable
,并期望当我运行Maven时它可以工作 - shaker-multi
,没有svn - 提交前者和svn - 更新后者。
这就是为什么我在这个问题上一直出错!
如果这些项目来自一个原本单一的项目,处理这些项目的正确方法是:
接下来,您进入IDE的SVN Repositories
选项卡,使用现在拆分的项目扩展存储库,并作为父项目(将模块作为子文件夹的项目)的Maven项目签出。
如果您像我一样使用最新版本的Subclipse,您将需要用于subclipse 1.10(svn 1.8)的Maven Eclipse(m2e)SCM连接器-更新站点(感谢buluschek开发,请参阅该帖子的最后评论),以便您可以从签出为Maven项目对话框中选择存储库路径。
有了它,您告诉Eclipse从父文件夹中签出整个项目,并且Eclipse会自动:
这一点(4)是这里的关键:虽然有几个项目,但它们已经链接在一起了(我猜在手动签出每个模块文件夹时也可以这样做,尽管我不知道如何做到)。
这样做之后,我所有的Maven问题都消失了。
我假设你的文件夹结构是这样的:
+-- shaker-multi
+--- pom.xml
+--- shaker-multi-core
+-- pom.xml
+--- shaker-multi-runnable
+-- pom.xml
+--- shaker-multi-webapp
+-- pom.xml
>
此外,您应该检查您的项目是否在命令上正常工作,而不是在Eclipse中正常工作。因此,您应该转到项目的根目录(摇床多文件夹)并
mvn清洁包装
这应该不会产生错误等。
我想到的一件事是为什么你的项目使用发布版本而不是快照版本。所以< code>0.0.1而不是< code>0.0.1-SNAPSHOT?
您应该改进的一点是在父级中定义maven编译器插件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
我建议这样做:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<project>
...
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
</project>
上面将定义许多插件的默认值,如maven编译器插件、maven资源插件等。
<dependencies>
<dependency>
<groupId>sunshine.web</groupId>
<artifactId>shaker-multi-core</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<!-- JSP & Servlet dependencies -->
</dependency>
</dependencies>
我建议像这样定义模块间的依赖关系:
<dependencies>
<dependency>
<groupId>sunshine.web</groupId>
<artifactId>shaker-multi-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<!-- JSP & Servlet dependencies -->
</dependency>
</dependencies>
当我使用: 我得到这个错误: 完整代码: 梯度提升分类器模型为:
问题内容: 在我的Web应用程序中,我对表单字段使用了一些自定义验证。在同一个表单中,我有两个按钮:一个用于实际提交表单,另一个用于取消/重置表单。 通常,我使用Safari作为默认浏览器。现在Safari5退出了,突然我的“取消/重置”按钮不再起作用了。每次按下重置按钮时,表单中的第一个字段都会获得焦点。但是,这与我的自定义表单验证相同。在其他浏览器上尝试时,一切都很好。我必须是Safari 5
我试图创建"CfnUserPoolResourceServer"的认知使用python代码。根据https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_cognito/CfnUserPoolResourceServer.html我试图设置“范围”参数。根据https://docs.aws.amazon.com/AWSCloudFo
我使用要连接到mysql,下面是我的Python语句: 但是有一个错误,这里是日志: 这是我的代码: 我已经创建数据库在谢谢
问题内容: 我正在尝试使用描述的技术在gradle项目中声明。 但是,当我这样做时,会出现此错误: 我怎样才能解决这个问题? 在顶层 build.gradle中 声明为属性的依赖 项 如下: 尝试在 模块级别的build.gradle中 检索依赖 项 (在其中引发错误): 引发错误: 问题答案: 在顶层,包括您的子项目: 在顶层定义ext属性: 如果您仅使用1个值,则不必一定是地图,但是我坚持使用
问题内容: 我知道这已经得到了回答,但是直接执行脚本“ python filename.py”似乎不起作用。我在SuSE Linux上有Python 2.6.2。 码: 命令行: 问题答案: 重组代码,以便在创建Pool实例之前定义函数。否则,工作人员将看不到您的功能。