情况是,我有两个具有相同结构的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>
 我有一个我正在尝试配置的MultiModule gradle项目.
Root
    projA
    projB
    other
        projC
        projD
        projE
        ...
我希望能够做的是在root build.gradle中有一个任务,它将在另一个目录中的每个项目中执行buildJar任务.
我知道我能做到
configure(subprojects.findAll {it.name != 'tropicalFish'}) {
    task hello << { task -> println "$task.project.name"}
}
但这也会得到projA和projB,我只想在c,d,e上执行任务...请让我知道实现这一目标的最佳方法.
我有一个多模块项目.
parent POM (1.0-SNAPSHOT) |-- module1 (1.0-SNAPSHOT) |-- module2 (1.0-SNAPSHOT) `-- module3 (1.0-SNAPSHOT)
当我执行mvn release时:准备它验证父POM是否有SNAPSHOT版本,并且所有相关模块都没有SNAPSHOT版本.如何自动将所有子模块从SNAPSHOT更新到下一个发行版本?
我想自动增加所有模块的版本.
我在一个带有分层目录结构的多模块项目中有一个关于Maven命名约定(groupId,artifactId和目录名称)的问题.
在询问之前,我通过其他网络了解了这个主题以及我为自己清理的内容:
命名约定指南 提供了示例:
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
(续)两级层次结构将是:
groupId:    org.organization.project.plugins
artifactId: project-portal-plugins ---.
                                      |
                                      project-sample-plugin
                                      |
                                      project-another-great-plugin
                                      |
                                      ???? (multiple module project)
你看到问号?多数民众赞成在哪里
我遵循示例中的约定(忽略意大利面条Apache CXF示例):
现在我们被困在第三级,就像没有保存和检查点的旧游戏一样.
directory-structure naming-conventions hierarchy maven multi-module
我有一个包含很多子模块的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
我一直在阅读,并使用SO的一些建议.到目前为止,我还没有找到办法做到这一点,但我确信它就在那里.
编辑:
对于所有包含的子程序,我已经放弃了以简单的方式使用它.到目前为止,我得到的最佳答案是使用dependancy插件手动指定(再次)要包含的每个子模块.我们的想法是能够轻松地为数十个客户配置POM,只需包含必要的模块,然后将其神奇地粘贴在一个位置的所有子模块的罐子中.Maven非常好,当你没有做太多时,但是当你尝试时,角括号税是不可思议的.
我仍然觉得奇怪的是,这些看似标准的任务(从SO上提出的问题判断,以及任何正常项目会做什么)都是如此困难.maven3更好吗?
有没有办法在Maven的父项目模块之间共享资源?例如,我想为多模块Maven项目中的所有模块指定一个log4j.properties文件.
通常,我使用Eclipse IDE通过选择一般项目来创建父项目,然后通过指定包装将其转换为Maven项目pom.这创建了一个"干净"的项目结构,没有src等文件夹.我想知道在这种情况下应该把这样的共享资源放在哪里.
EDIT1:我想将公共资源放在父项目中.
我正在尝试创建一个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>
道儿童模块:
<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>
------------------------
服务子模块:
<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>
------------------------------------------
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 …我有这个多模块构建配置,我正在努力工作,但每当我尝试编译项目时它失败并出现以下错误:
?  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] …我正在使用Dagger 2和Kotlin进行Android开发.我的项目也是一个多模块项目.我的settings.gradle文件是这样的:
include :app
include :lib
我也在维护lib模块.
在Dagger文件中(例如在组件中),我尝试从其他模块中获取项目.例如:
@Component
interface AppComponent{
    fun getPresenter() : Presenter
}
Presenter对象在lib模块中定义.我在linux环境中工作,我正在使用Android Studio 3预览金丝雀5.代码运行良好,我能够生成APK.
但是我的公司希望使用稳定版的Android Studio生成APK.我正在使用Android Studio 2.3.3.
在编译Android项目时,我遇到了这个错误:
error: error.NonExistentClass
出现错误
:app:kaptDebugKotlin 
执行并由dagger类找不到,该类在其他项目中定义.可能的解决方法是什么?对不起,我的英语不好.
我遇到了将属性从多模块项目的超级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>
孩子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>
但是,我不知道为什么我无法获取插件配置来检索超级pom的属性.
multi-module ×10
maven ×6
java ×3
maven-2 ×2
android ×1
build ×1
build.gradle ×1
dagger-2 ×1
dependencies ×1
exception ×1
gradle ×1
hierarchy ×1
kotlin ×1
maven-3 ×1
properties ×1
sbt ×1
scala ×1