标签: multi-module

构建Maven多模块项目的顺序?

情况是,我有两个具有相同结构的Maven多模块项目:

Parent
    - Module 1
    - Module 2

当我构建项目1时,我看到父项是首先构建的(顺序是parent-> module1-> module2).但是对于项目2,父项是最后构建的(顺序是module1-> module2-> parent).为什么这两个项目有不同的构建订单?此外,如何手动控制构建顺序?

更新1:
两个父项目都是没有源代码的简单POM项目,因此我无法根据依赖关系图解释构建顺序.

更新2:
除了GAV和子模块名称之外,父POM是相同的:

<?xml version="1.0" encoding="UTF-8"?>
<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>parent-group-id</groupId>
    <artifactId>parent-artifact-id</artifactId>
    <version>parent-version</version>
    <packaging>pom</packaging>
    <name>parent-name</name>
    <modules>
        <module>module-1</module>
        <module>module-2</module>
    </modules>
</project>

java build maven multi-module

51
推荐指数
3
解决办法
4万
查看次数

在子项目上执行gradle任务

我有一个我正在尝试配置的MultiModule gradle项目.

Root
    projA
    projB
    other
        projC
        projD
        projE
        ...
Run Code Online (Sandbox Code Playgroud)

我希望能够做的是在root build.gradle中有一个任务,它将在另一个目录中的每个项目中执行buildJar任务.

我知道我能做到

configure(subprojects.findAll {it.name != 'tropicalFish'}) {
    task hello << { task -> println "$task.project.name"}
}
Run Code Online (Sandbox Code Playgroud)

但这也会得到projA和projB,我只想在c,d,e上执行任务...请让我知道实现这一目标的最佳方法.

gradle multi-module build.gradle

39
推荐指数
2
解决办法
4万
查看次数

在Maven项目中,如何自动更新所有子模块的版本以及父模块?

我有一个多模块项目.

parent POM (1.0-SNAPSHOT)
|-- module1 (1.0-SNAPSHOT)
|-- module2 (1.0-SNAPSHOT)
`-- module3 (1.0-SNAPSHOT)

当我执行mvn release时:准备它验证父POM是否有SNAPSHOT版本,并且所有相关模块都没有SNAPSHOT版本.如何自动将所有子模块从SNAPSHOT更新到下一个发行版本?

我想自动增加所有模块的版本.

maven-2 multi-module maven-release-plugin

33
推荐指数
3
解决办法
6万
查看次数

分层多模块项目的Maven命名约定

我在一个带有分层目录结构的多模块项目中有一个关于Maven命名约定(groupId,artifactId和目录名称)的问题.

研究

在询问之前,我通过其他网络了解了这个主题以及我为自己清理的内容:

  1. 我的问题可能重复,但它不包括多层次级别.

  2. 项目目录名称应与artificatId匹配.

  3. 命名约定指南 提供了示例:

    • groupId将在所有项目中唯一地标识您的项目,因此我们需要强制执行命名模式.它必须遵循包名称规则(例如org.apache.maven,org.apache.commons,org.apache.maven.plugins)

    • artifactId如果你创建了它,那么你可以用小写字母和没有奇怪的符号选择你想要的任何名称.(例如,maven,commons-math)

这很简单,我理解它,但有些事情仍然不清楚.

约定中提到的artifactId示例只能应用于单级层次结构模块.

例子

我浏览了maven存储库并提取了一些示例:

Spring主要使用名称:spring-core,spring-context,spring-context-support.所有独立模块都是一级层次结构和弹出前缀,以提高搜索效率.没有问题,因为等级不是那么深.

Apache CXF命名对于Apache来说是非常规的.工件是独立模块,在名称中最多可包含5个不同的工件.CXF的工具,wsdlto,数据绑定,JAXB.

有很多工件(cxf-rt-databinding-jaxb,cxf-rt-databinding-aegis,cxf-rt-databinding-xmlbeans,cxf-rt-databinding-sdo),它们可以分组在多个模块项目中(cxf-rt) - 数据绑定),但他们没有,因此名称成为意大利面条.

最后,Maven插件首先是一个多模块项目(在org.apache.maven之后),它有一些工件,如:maven-compiler-plugin,maven-enforcer-plugin.

有很多例子,并且都遵循命名artifactIds(因此是项目目录)的不同约定.

结果

从示例中获取最佳实践,让我们检查层次结构级别.

一级层次结构命名将是(

groupId:    org.organization.project
artifactId: project-portal ---.
                              |
                              project-portal-service
                              |
                              project-portal-plugins (continued on next diagram)
                              |
                              project-portal-util
Run Code Online (Sandbox Code Playgroud)

(续)两级层次结构将是:

groupId:    org.organization.project.plugins
artifactId: project-portal-plugins ---.
                                      |
                                      project-sample-plugin
                                      |
                                      project-another-great-plugin
                                      |
                                      ???? (multiple module project)
Run Code Online (Sandbox Code Playgroud)

你看到问号?多数民众赞成在哪里

问题

我遵循示例中的约定(忽略意大利面条Apache CXF示例):

  • 根 - 项目门户(例如,spring-core,maven-core)
  • 第一级层次结构名称从root - project-portal-plugins继承(例如,spring-context-support).
  • 二级层次结构名称 - project-sample-plugin(例如maven-compiler-plugin).

现在我们被困在第三级,就像没有保存和检查点的旧游戏一样.

  1. 这是从更深层次结构级别的Maven示例中获取的正确目录命名路径吗? …

directory-structure naming-conventions hierarchy maven multi-module

33
推荐指数
2
解决办法
1万
查看次数

Maven多模块项目 - 将所有"包"JARS从子模块复制到父/目标/

我有一个包含很多子模块的maven项目.我正在寻找的是获取聚合POM的/ target /目录中包含的子模块生成的所有.jar文件的方法,以便以后可以方便地使用它们.

  • 它们不需要合并.最好不要,但如果必须的话那就没问题.
  • 不关心依赖性
  • 这主要是为了方便起见

我正在做的基本版本:

Prj1/pom.xml  =>  prj1/target/proj1.jar  (and classes/generated-sources/etc)
Prj2/pom.xml  =>  prj2/target/proj2.jar
Main/pom.xml  =>
                  main/target/proj1.jar
                  main/target/proj2.jar
                  ... classes/generated-sources not needed at all,
                  ... but they could be combined here.  I assume they will be
Run Code Online (Sandbox Code Playgroud)

我一直在阅读,并使用SO的一些建议.到目前为止,我还没有找到办法做到这一点,但我确信它就在那里.

编辑:

对于所有包含的子程序,我已经放弃了以简单的方式使用它.到目前为止,我得到的最佳答案是使用dependancy插件手动指定(再次)要包含的每个子模块.我们的想法是能够轻松地为数十个客户配置POM,只需包含必要的模块,然后将其神奇地粘贴在一个位置的所有子模块的罐子中.Maven非常好,当你没有做太多时,但是当你尝试时,角括号税是不可思议的.

我仍然觉得奇怪的是,这些看似标准的任务(从SO上提出的问题判断,以及任何正常项目会做什么)都是如此困难.maven3更好吗?

maven multi-module

30
推荐指数
2
解决办法
4万
查看次数

在多模块maven项目中指定公共资源

有没有办法在Maven的父项目模块之间共享资源?例如,我想为多模块Maven项目中的所有模块指定一个log4j.properties文件.

通常,我使用Eclipse IDE通过选择一般项目来创建父项目,然后通过指定包装将其转换为Maven项目pom.这创建了一个"干净"的项目结构,没有src等文件夹.我想知道在这种情况下应该把这样的共享资源放在哪里.

EDIT1:我想将公共资源放在父项目中.

java maven-2 maven-3 maven multi-module

28
推荐指数
2
解决办法
2万
查看次数

MavenError:无法在项目上执行目标:无法解决依赖关系在Maven Multimodule项目中

我正在尝试创建一个maven多模块项目.项目创建成功,但当我尝试使用一个模块作为另一个模块的依赖项时,它会生成异常.当我使用eclipse创建模块时,我选择打包为jar,但是当创建模块时,在子pom.xml中没有提及包装标签,我手动将包装标签作为jar插入.以下是我的父母pom.xml:

<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>com.netsol</groupId>
<artifactId>empirecl</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
-------------------------
<modules>
    <module>empirecl-web</module>
    <module>empirecl-dao</module>
    <module>empirecl-service</module>
    <module>empirecl-api</module>
</modules>
Run Code Online (Sandbox Code Playgroud)

道儿童模块:

<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>com.netsol</groupId>
    <artifactId>empirecl</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
</parent>
<artifactId>empirecl-dao</artifactId>
<packaging>jar</packaging>
<name>empirecl-dao</name>
------------------------
Run Code Online (Sandbox Code Playgroud)

服务子模块:

<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>com.netsol</groupId>
    <artifactId>empirecl</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
</parent>
<artifactId>empirecl-service</artifactId>
<packaging>jar</packaging>
<name>empirecl-service</name>

<dependencies>
    <dependency>
        <groupId>com.netsol</groupId>
        <artifactId>empirecl-dao</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>jar</type>
    </dependency>
------------------------------------------
Run Code Online (Sandbox Code Playgroud)

Dao模块maven清理并安装成功,但是当我尝试使用服务模块时,它将生成以下异常:

[ERROR] Failed to execute goal on project empirecl-service: Could not resolve dependencies for project com.netsol:empirecl-service:jar:0.0.1-SNAPSHOT: Failed to collect …
Run Code Online (Sandbox Code Playgroud)

java dependencies exception maven multi-module

26
推荐指数
1
解决办法
10万
查看次数

为什么sbt build失败并出现"MissingRequirementError:找不到编译器镜像中的对象scala.runtime."?

我有这个多模块构建配置,我正在努力工作,但每当我尝试编译项目时它失败并出现以下错误:

?  postgresql-netty git:(multi-module) sbt clean compile
[info] Loading global plugins from /Users/mauricio/.sbt/plugins
[info] Loading project definition from /Users/mauricio/projects/scala/postgresql-netty/project
[info] Set current project to db-async-base (in build file:/Users/mauricio/projects/scala/postgresql-netty/)
[success] Total time: 0 s, completed May 1, 2013 11:18:29 PM
[info] Updating {file:/Users/mauricio/projects/scala/postgresql-netty/}db-async-common...
[info] Updating {file:/Users/mauricio/projects/scala/postgresql-netty/}db-async-base...
[info] Resolving org.specs2#scalaz-core_2.10;7.0.0 ...
[info] Done updating.
[info] Resolving org.scala-lang#scala-library;2.10.1 ...
[info] Done updating.
[info] Updating {file:/Users/mauricio/projects/scala/postgresql-netty/}postgresql-async...
[info] Resolving ch.qos.logback#logback-classic;1.0.9 ...
[info] Compiling 16 Scala sources to /Users/mauricio/projects/scala/postgresql-netty/db-async-common/target/scala-2.10/classes...
[info] Resolving org.specs2#scalaz-core_2.10;7.0.0 ...
[info] …
Run Code Online (Sandbox Code Playgroud)

scala sbt multi-module

25
推荐指数
3
解决办法
2万
查看次数

错误:error.NonExistentClass Kotlin在多模块Dagger项目中

我正在使用Dagger 2和Kotlin进行Android开发.我的项目也是一个多模块项目.我的settings.gradle文件是这样的:

include :app
include :lib
Run Code Online (Sandbox Code Playgroud)

我也在维护lib模块.

在Dagger文件中(例如在组件中),我尝试从其他模块中获取项目.例如:

@Component
interface AppComponent{
    fun getPresenter() : Presenter
}
Run Code Online (Sandbox Code Playgroud)

Presenter对象在lib模块中定义.我在linux环境中工作,我正在使用Android Studio 3预览金丝雀5.代码运行良好,我能够生成APK.

但是我的公司希望使用稳定版的Android Studio生成APK.我正在使用Android Studio 2.3.3.

在编译Android项目时,我遇到了这个错误:

error: error.NonExistentClass
Run Code Online (Sandbox Code Playgroud)

出现错误

:app:kaptDebugKotlin 
Run Code Online (Sandbox Code Playgroud)

执行并由dagger类找不到,该类在其他项目中定义.可能的解决方法是什么?对不起,我的英语不好.

android multi-module kotlin dagger-2

24
推荐指数
5
解决办法
2万
查看次数

获取子模块中父POM中定义的属性[多模块项目]

我遇到了将属性从多模块项目的超级pom传递到子pom的问题.

目前我有以下文件: superpom

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>...</groupId>
    <artifactId>meta-all</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
    <properties>
        <databasedriver>net.sourceforge.jtds.jdbc.Driver</databasedriver>
    </properties>
    <modules>
        <module>child1</module> 
    </modules>
</project>
Run Code Online (Sandbox Code Playgroud)

孩子pom

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>...</groupId>
    <artifactId>child1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>sql-maven-plugin</artifactId>
                <version>1.5</version>
                <!-- JDBC Driver -->
                <dependencies>
                    <dependency>
                        <groupId>net.sourceforge.jtds</groupId>
                        <artifactId>jtds</artifactId>
                        <version>1.3.1</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <driver>${project.parent.databasedriver}</driver>
                  ...
                    <autocommit>true</autocommit>
                    <delimiter>GO</delimiter>
                    <delimiterType>row</delimiterType>
                </configuration>
                <executions>
Run Code Online (Sandbox Code Playgroud)

但是,我不知道为什么我无法获取插件配置来检索超级pom的属性.

properties maven multi-module

23
推荐指数
1
解决办法
4万
查看次数