【问题标题】:building dependencies in a jar type maven project在 jar 类型的 maven 项目中构建依赖项
【发布时间】:2014-02-25 23:05:58
【问题描述】:

我有一个包类型为 jar 的 maven 项目,它有一些依赖项,这些依赖项将在构建项目时打包到生成的 jar 文件中。其中一些依赖项是我自己的项目,我想在构建当前项目时自动重新构建它们。如何实现?我目前只发现<modules> 部分只能与包类型pom一起使用,所以这似乎是不可能的。关于这个问题的任何想法?这是当前 pom 包的简短示例:

<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>mygroup</groupId>
    <artifactId>myproject2</artifactId>
    <version>0.0.1</version>
    <packaging>jar</packaging>
    <name>myproject2</name>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>mymainclass</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <appendAssemblyId>false</appendAssemblyId>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.15</version>
                <configuration>
                    <enableAssertions>false</enableAssertions>
                </configuration>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        [... some external dependencies ...]
        <dependency>
            <groupId>mygroup</groupId>
            <artifactId>myproject1/artifactId>
            <version>0.0.1</version>
        </dependency>
    </dependencies>
</project>

更新:

详细说明我试图解决的开发问题:

假设您在 IDE 中打开了两个项目(我使用的是 netbeans)。您正在调试 myproject2 以跟踪一些错误。您可以通过单击类名称或按照调试器中的步骤来浏览代码。

这通常会导致 myproject1 发生变化,而您甚至都没有注意到它。结果,您将重建 myproject2 (您正在调试),而 myproject1 不会自动重建。错误仍然发生,您可能不知道为什么会发生这种情况并搜索并搜索另一个错误,直到您意识到您之前没有重建 myproject1。然后,您必须在 myproject2 之后重建 myproject1,然后才能获得正确的行为(或下一个错误)。这在工作中经常发生。

单独的多项目 POM 也会发生同样的情况,它本质上是另一个项目,在 IDE 中处理代码时会/可能会被遗忘。

【问题讨论】:

标签: java maven jar dependencies


【解决方案1】:

您可以创建一个多模块项目,其中包含相关项目和依赖项目作为模块。父项目将是“pom”类型,但在父项目上触发构建将导致重新构建所有模块。

    <groupId>group</groupId>
    <artifactId>artifact</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <modules>
        <module>dependency.1</module>
        <module>dependency.2</module>
        <module>your.project</module>       
    </modules>

【讨论】:

  • 如果我正确理解这一点:带有您的 pom 示例的项目将用作上面带有我的 pom 的“your.project”的父项目?这不是一种循环依赖吗?
  • 这不是父/子关系,而是一个多模块项目,它将你的项目和依赖项结合在一起。
  • 好的,所以我有我当前 POM 的项目,并另外定义了多项目 POM,而不是构建我的项目,我构建了多项目 POM?这对我来说似乎很不切实际。我主要尝试实现的是在开发 your.project 时更简单的工作流程,如果可以通过调用 your.project 上的构建而不是单独的构建来实现,那将更加方便。
  • 我没有发现拥有一个多模块项目是一个很大的开销。如果有其他更方便的方法,我会很感兴趣。
  • 如果你使用 Eclipse M2E 插件为例,你可以配置 maven 来解析工作空间中的依赖关系。因此,在本地对您的项目所做的任何更改都将被自动拾取。但是我不确定 NetBeans
猜你喜欢
  • 1970-01-01
  • 2018-01-20
  • 2020-05-18
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2020-02-19
  • 1970-01-01
相关资源
最近更新 更多