首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >聚合maven中父pom的所有源

聚合maven中父pom的所有源
EN

Stack Overflow用户
提问于 2018-03-16 14:52:55
回答 2查看 1.4K关注 0票数 4

客户端可交付的部分内容包括我们正在处理的项目的源代码。我在mvn generate-sources中使用maven。问题是它包含了所有的依赖项,并聚合了每个依赖项的源。我正在尝试生成一个平面结构,并在.java上过滤groupid文件。

有关maven源插件的文档非常回避。我所做的所有搜索都指向了过滤资源,这不是我想要的。

我的项目结构是一个带孩子的父级pom,我正试图实现这样的目标:

代码语言:javascript
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>3.0.1</version>
    <executions>
        <execution>
            <id>attach-sources</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
    <resouces>
            <filter>
                    <include>com.mygroupid.project</include>
            </filter>
    </resouces>
</plugin>

我期待的是:

  • “fat”结构(所有项目源按包名聚合在一个dir中)
  • 无重复来源
  • 在我的源代码组id之外没有代码

编辑:

假设这样的结构:

代码语言:javascript
复制
- module-1 pom.xml  // aggregate project
    |- module-1-core (has dependency to module-2 and module-2)
    |- module-1-war
- module-2 pom.xml  // aggregate project
    |- module-2-commons
- module-3 pom.xml  // aggregate project
    |- module-3-services
- // etc...

我希望档案如下:

代码语言:javascript
复制
- big-fat-code-sources.zip
    |- module-1-core sources + test source
    |- module-1-war sources + test source
    |- module-2-commons sources + test source
    |- module-3-services sources + test source
    |- // etc...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-29 14:05:55

最后,我用maven-assembly-plugin解决了这个问题,还有很多不太明显的额外配置。

在我的assembly.xml描述符中,我在项目的模块上添加了一个过滤器:

代码语言:javascript
复制
<moduleSets> // 1
    <moduleSet>
        <includes>
            <include>mrkrabs-secret-recipe:*</include>
        </includes>
        <useAllReactorProjects>true</useAllReactorProjects>
        <sources>
            <outputDirectoryMapping>${artifactId}-${version}</outputDirectoryMapping> // 2
            <includeModuleDirectory>true</includeModuleDirectory>
            <fileSets>
                <fileSet> // 3
                    <directory>src</directory>
                    <excludes>
                        <exclude>**/target/**</exclude>
                        <exclude>**/bin/**</exclude>
                    </excludes>
                </fileSet>
            </fileSets>
        </sources>
    </moduleSet>
</moduleSets>
  1. 包括maven项目中的所有模块。
  2. 使用工件id和版本将每个模块映射到目录中。
  3. 强制过滤,只保留源

这还不包括传递依赖项及其源代码。

因此我在依赖项上添加了一个筛选器:

代码语言:javascript
复制
<dependencySets> // 1
    <dependencySet>
        <includes> // 2
            <include>mrkrabs-secret-recipe:*</include>
        </includes>
        <scope>provided</scope>
        <outputDirectory>/dependencies</outputDirectory> // 3
        <useTransitiveFiltering>true</useTransitiveFiltering> // 4
        <unpack>true</unpack>
        <unpackOptions> // 5
            <includes>
                <include>mrkrabs-*/**</include>
            </includes>
            <excludes>
                <exclude>*.sql</exclude>
                <exclude>*.zip</exclude>
                <exclude>*.class</exclude>
                <exclude>*.jar</exclude>
            </excludes>
            <useDefaultExcludes>true</useDefaultExcludes>
        </unpackOptions>
    </dependencySet>
</dependencySets>
  1. 包括maven项目的所有依赖项。
  2. 过滤器,仅包含来自mrkrabs项目的工件。
  3. 将所有依赖项放到/dependencies文件夹中
  4. 强制将筛选应用于传递依赖项。
  5. 在解压缩传递依赖项时应用额外的筛选:
代码语言:javascript
复制
1. Include only mrkrabs projects (the `useTransitiveFiltering` should take care of this but does not)
2. Exclude certain files we do not wanna see in the archive (.sql, .zip, .class, .jar)

票数 0
EN

Stack Overflow用户

发布于 2018-03-16 16:33:07

使用source:aggregate目标可以解决此任务:

代码语言:javascript
复制
mvn clean source:aggregate

假设您有以下项目结构

代码语言:javascript
复制
- root pom.xml  // aggregate project
  |- module1 // jar module
  |- module2 // another jar...

使用根pom中的以下配置:

代码语言:javascript
复制
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-source-plugin</artifactId>
  <version>3.0.1</version>
</plugin>

执行上述命令时,它将在target文件夹中生成一个target,该文件夹将包含混合在一起的所有modules源。

这个Maven目标的更多医生

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49323642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档