当前位置: 首页 > 知识库问答 >
问题:

如何配置pom文件和TeamCity在maven java项目中构建依赖模块?

黄逸清
2023-03-14

我有一个由两个模块组成的项目。其中一个被认为是主要的。所以第二个取决于第一个。我还应该为模块生成javadoc jar文件。输出应为四。jar文件:2个模块jar文件和两个javadoc jar文件。

在本地,要生成两个jar文件,我应该重复这些步骤几次(我不知道为什么):

>

  • 构建第一个并安装到本地maven存储库。

    然后我可以建造第二个。

    如果不安装第一个模块,我就无法实现打包阶段,因为当我测试第二个模块时,它找不到第一个模块jar文件。

    我可以通过一个构建过程完成所有这些步骤吗?

    我有的POM:

    1. 父pom。xml:
    <?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>ru.bingap</groupId>
        <artifactId>repres</artifactId>
        <version>1.0</version>
        <packaging>pom</packaging>
        <name>bingap</name>
        <modules>
            <module>mainmod</module>
            <module>secondmod</module>
        </modules>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.2</version>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>ru.bingap</groupId>
                    <artifactId>repres</artifactId>
                    <version>1.0</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        </properties>
    </project>
    
    <?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">
        <parent>
            <groupId>ru.bingap</groupId>
            <artifactId>repres</artifactId>
            <version>1.0</version>
        </parent>
    
        <modelVersion>4.0.0</modelVersion>
        <artifactId>mainmod</artifactId>
        <version>1.0</version>
        <name>mainmod</name>
        <packaging>jar</packaging>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.2</version>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>3.1.1</version>
                    <executions>
                        <execution>
                            <id>attach-javadocs</id>
                            <goals>
                                <goal>javadoc</goal>
                            </goals>
                            <phase>prepare-package</phase>
                            <configuration>
                                <reportOutputDirectory>out\artifacts\output_jar\javadoc\</reportOutputDirectory>
                                <encoding>UTF-8</encoding>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.4</version>
                    <executions>
                        <execution>
                            <goals><goal>test-jar</goal></goals>
                            <phase>compile</phase>
                            <configuration>
                                <!--outputDirectory>out\artifacts\output_jar\</outputDirectory>
                                <finalName>mainmod</finalName-->
                            </configuration>
                        </execution>
                        <execution>
                            <id>attach-javadocs</id>
                            <goals><goal>jar</goal></goals>
                            <phase>compile</phase>
                            <configuration>
                                <outputDirectory>out\artifacts\output_jar\</outputDirectory>
                                <finalName>mainmod-javadoc</finalName>
                                <classesDirectory>out\artifacts\output_jar\javadoc\apidocs\</classesDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        </properties>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
            <dependency>
                <groupId>com.healthmarketscience.jackcess</groupId>
                <artifactId>jackcess</artifactId>
                <version>2.1.2</version>
            </dependency>
        </dependencies>
    </project>
    
    <?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">
        <parent>
            <artifactId>repres</artifactId>
            <groupId>ru.bingap</groupId>
            <version>1.0</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
        <groupId>ru.bingap</groupId>
        <artifactId>secondmod</artifactId>
        <version>1.0</version>
        <dependencies>
            <dependency>
                <groupId>ru.bingap</groupId>
                <artifactId>mainmod</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>RELEASE</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <packaging>jar</packaging>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.12</version>
                </dependency>
                <dependency>
                    <groupId>com.healthmarketscience.jackcess</groupId>
                    <artifactId>jackcess</artifactId>
                    <version>2.1.2</version>
                </dependency>
                <dependency>
                    <groupId>ru.bingap</groupId>
                    <artifactId>mainmod</artifactId>
                    <version>1.0</version>
                    <type>test-jar</type>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <build>
            <pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.2</version>
                        <configuration>
                            <source>1.6</source>
                            <target>1.6</target>
                            <encoding>UTF-8</encoding>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>3.1.1</version>
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>javadoc</goal>
                                </goals>
                                <phase>prepare-package</phase>
                                <configuration>
                                    <reportOutputDirectory>out\artifacts\output_jar\javadoc\</reportOutputDirectory>
                                    <encoding>UTF-8</encoding>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jar-plugin</artifactId>
                        <version>2.4</version>
                        <executions>
                            <execution>
                                <id>secondmod</id>
                                <goals><goal>jar</goal></goals>
                                <phase>package</phase>
                                <configuration>
                                    <outputDirectory>out\artifacts\output_jar\</outputDirectory>
                                    <finalName>secondmod</finalName>
                                </configuration>
                            </execution>
                            <execution>
                                <id>attach-secondmod-javadocs</id>
                                <goals><goal>jar</goal></goals>
                                <phase>package</phase>
                                <configuration>
                                    <outputDirectory>out\artifacts\output_jar\</outputDirectory>
                                    <finalName>secondmod-javadoc</finalName>
                                    <classesDirectory>out\artifacts\output_jar\javadoc\apidocs\</classesDirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        </properties>
    </project>
    
  • 共有2个答案

    羊丰茂
    2023-03-14

    我找到了解决方案。收到错误是因为main mod模块仅可用于测试范围

    钱哲茂
    2023-03-14

    您只需在父项目上调用mvn清洁安装。它将以正确的顺序构建两个模块。

     类似资料:
    • 我是IntelliJ和Java的新手,但我有相当多的团队合作经验,主要是构建。NET项目。 我在IntelliJ中创建了一个非常简单的Android库项目,基本上只有一个使用RxJava(Java的反应性扩展)的类。我已经使用Maven的Project Structure->Libraries->在IntelliJ中添加了Rx库。我添加的实际库是,它会拉入。 考虑使用Maven构建运行器;但是项目

    • 我们有一个Maven多模块项目,其中有大约30个子项目/模块。 使用这两个依赖项的所有子项目。(这只是为了在示例中放一些具体的东西) 因此,我们重构并将这两个依赖项放入父POM。上面的片段现在在父级别。所有子项目仍然可以从中受益,并且只需要在一个地方维护版本,所有人都很高兴。 我们现在有一个适合业务用例的第31个项目,适合这个多模块项目,我们相信把它放在同一个父POM下是有意义的。 然而,第31个

    • 我如何在一个Android Gradle项目中设置模块的依赖关系,在这个项目中,模块之间相互依赖,这样我就可以一次部署所有模块的新快照或发布版本的构建? 该项目的结构如下: 项目配置文件如下,仅显示相关部分(根据我的判断): 设置。分级: lib-help/gradle.properties: lib-help/build.gradle: 当我运行时,所有内容都编译得很好,并且上载文件被推送到正确

    • 问题内容: 对于不同的配置文件,maven pom.xml文件中是否可能具有一组不同的依赖关系? 例如 我想在一个配置文件中选择一个不同的依赖项jar文件,该文件具有相同的类名和相同接口的不同实现。 问题答案: 在此引用Maven文档: 配置文件元素既包含可选激活(配置文件触发器),又包含如果已激活POM则要对POM进行的一组更改。例如,为测试环境构建的项目可能指向与最终部署不同的数据库。或者可以

    • Project Structure用来配置项目和模块的各种构建参数和属性,前面我们已经介绍过了SDK Location和Project的配置,本章主要介绍模块构建的一些配置. 打开Project Structure对话框: 操作步骤: 菜单栏: File —> Project Structure 快捷键: Mac: command + ; Windows/Linux: Ctrl + Shift +

    • Maven插件及其在父pom中定义的依赖项,我不希望我的子pom包含该插件依赖项。 例如,如果有1个父级和100个子级,99个使用该插件并希望在一个子级中排除该插件。 我们如何才能实现这一目标?