执行Parent2
并不会在Project2
儿童的nor模块上应用生命周期。当所有子项目都处于同一级别时,我尝试将Project2
和Parent2
合并到一个父级mvn clean install -pl Parent2
中,以仅将其排除在许多生命周期之外。 这怎么办?
类似地 Parent2
仅适用于Parent1
,而没有其子级/模块!
这是我了解的最新POM。请注意,我唯一的限制是将所有文件夹都保持在同一级别(在<project>
<modelVersion>4.0.0</modelVersion>
<groupId>any</groupId>
<artifactId>Parent1</artifactId>
<version>whatever</version>
<packaging>pom</packaging>
<modules>
<module>Parent2</module>
<module>Project1</module>
</modules>
</project>
下)
父母1
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>any</groupId>
<artifactId>Parent1</artifactId>
<version>whatever</version>
</parent>
<packaging>pom</packaging>
<artifactId>Parent2</artifactId>
<modules>
<module>../Project2</module>
<module>../Project3</module>
</modules>
</project>
父母2
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>any</groupId>
<artifactId>Parent1</artifactId>
<version>whatever</version>
</parent>
<packaging>jar</packaging>
<artifactId>Project1</artifactId>
</project>
Project1
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>any</groupId>
<artifactId>Parent2</artifactId>
<version>whatever</version>
<relativePath>../Parent2</relativePath>
</parent>
<packaging>jar</packaging>
<artifactId>Project2</artifactId>
</project>
Project2(Project3完全相同)
public class ShareDialogFragment extends BottomSheetDialogFragment {
@Nullable
@Override
public View onCreateView(final @NonNull LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_share, container, false);
ButterKnife.bind(this, rootView);
readArguments();
return rootView;
}
private void readArguments() {
if (getArguments() != null) {
sharedImageGridId = getArguments().getLong(Constants.Extra.SHARED_IMAGE_GRID_ID);
isReadyToShare = getArguments().getBoolean(Constants.Extra.SHARED_IMAGE_IS_READY);
} else {
listener.onShareError(R.string.main_activity_share_photo_error);
}
}
}
答案 0 :(得分:1)
我也有兴趣将排除应用于子模块。但是,将mvn clean install -pl Parent2 -amd
和clean
应用于install
,Parent2
和Project2
中,Project3
可以按期望的方式工作。但是,正如Pawl的comment所指出的,并根据MNG-5230问题
嵌套模块不被父模块排除。排除方法模仿了包含方法,并且其匹配器不支持通配符等。因此要进行级联排除将需要一个额外的标记,例如
-amd
。使用时按以下顺序过滤依存关系图 -pl:
1.包含的项目+可能是上游和下游
2.排除的项目
3.跳过简历项目因此应该有可能直接排除嵌套模块,因为嵌套模块应该在过滤开始之前出现在初始依赖关系图中。
因此无法使用其父/所有者pom
排除嵌套模块。这是我解决该问题的方法。只需使用配置文件并在配置文件定义之外完全删除子模块即可解决该问题。
简而言之是使用配置文件来识别模块,并注意无论激活了哪个配置文件,共享在外部配置文件中识别的模块
示例(自OP项目命名起)
父母1 (为澄清起见,已与Project4
添加Project1
一样
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>Parent1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<profiles>
<profile>
<id>multi-modules-profile</id>
<modules>
<module>Parent2</module>
<module>Project2</module>
<module>Project3</module>
</modules>
</profile>
<profile>
<id>simple-module-profile</id>
<modules>
<module>Project1</module>
</modules>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
<modules>
<module>Project4</module>
</modules>
Project1 (与Project4
类似)
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>Parent1</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>Project1</artifactId>
父母2
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>Parent1</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>Parent2</artifactId>
<packaging>pom</packaging>
Project2 (与Project3
类似)
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>Parent2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../Parent2</relativePath>
</parent>
<artifactId>Project2</artifactId>
现在运行mvn clean
将适用于Parent1
,Project1
和Project4
,因为Project1
在默认情况下处于激活状态的配置文件中(执行)。运行mvn clean -P simple-module-profile
具有相同的效果,因为Project4
在配置文件定义之外共享。
最后,运行mvn clean -P multi-modules-profile
将应用于Parent1
,Project4
,Parent2
,Project2
和Project3
,而Project1
哪个是需要的。请注意,Project4
始终在其中,因为它在配置文件定义之外。
答案 1 :(得分:0)
编辑:答案仅适用于:
类似地,mvn clean install -pl Parent2仅应用于不带子代/模块的Parent2!
使用mvn -pl Parent2 -amd clean install
构建Parent2及其所有模块。