客户的部分可交付成果包括我们正在处理的项目的源代码。我和mvn generate-sources
使用了maven。问题是它包含所有依赖项并聚合每个依赖项的源。我尝试使用.java
上的groupid
文件生成平面结构。
文档对maven-source-plugin非常回避。我所做的所有搜索最终都指向过滤资源,这不是我正在寻找的。 p>
我的项目结构是一个有孩子的父母pom,我试图达到这样的目的:
<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>
我期待的是:
修改
假设这样的结构:
- 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...
我希望存档如下:
- 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...
答案 0 :(得分:1)
使用source:aggregate
目标应解决此任务:
mvn clean source:aggregate
假设您拥有以下项目结构
- root pom.xml // aggregate project
|- module1 // jar module
|- module2 // another jar...
只需在root pom中进行以下配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
</plugin>
并执行上述命令,它将在.jar
文件夹中生成target
,该文件夹将包含modules
混合在一起的所有源。< / p>
More doc了解Maven的目标。
答案 1 :(得分:0)
我最终解决了maven-assembly-plugin
的问题以及许多不明显的额外配置。
在我的assembly.xml
描述符中,我在项目的模块中添加了一个过滤器:
<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>
这还没有包含传递依赖项及其源代码。
所以我在依赖项上添加了一个过滤器:
<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>
解压传递依赖项时应用额外的过滤:
useTransitiveFiltering
应该处理此事但不会)