【问题标题】:Adding external jar as dependency in maven project in Intellij IDE在 Intellij IDE 的 maven 项目中添加外部 jar 作为依赖项
【发布时间】:2021-09-01 14:09:53
【问题描述】:

我正在使用 Intellij 社区版 v2020.3.2 和 Java 8。

我正在通过以下步骤添加外部 jar 文件,文件 -> ProjectStructure -> 项目设置 -> 模块 -> + -> 罐子或目录。

在 IDE 中执行正常。但是使用maven安装时会报错“package package-name does not exist”。

我的 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">
    <parent>
        <artifactId>DDXUtils</artifactId>
        <groupId>com.ph</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ValidationManager</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <build>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.ph.validationManager.Dummy</mainClass>
                            <classpathPrefix>lib/</classpathPrefix>
                            <addClasspath>true</addClasspath>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-libs</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.parent.basedir}/target/lib</outputDirectory>
                            <excludeScope>provided</excludeScope>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-artifact</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>${project.groupId}</groupId>
                                    <artifactId>${project.artifactId}</artifactId>
                                    <version>${project.version}</version>
                                    <type>${project.packaging}</type>
                                </artifactItem>
                            </artifactItems>
                            <outputDirectory>${project.parent.basedir}/target</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>

    </dependencies>


</project>

当我删除外部 jar 时,maven 安装工作正常。

【问题讨论】:

  • 依赖项需要由 maven 而不是您的 IDE 添加,否则您的构建不知道它们。
  • 是的,IDE 非常擅长打破 Ant 和 Maven 等 de facto 标准
  • @ M. Deinum 是的,我现在正在这样做。感谢您与我们联系。

标签: java maven intellij-idea


【解决方案1】:

要在 Maven 中使用本地 jar,您首先需要将此 jar 安装到您的 Maven 本地存储库中。然后,您可以在 Maven pom.xml 构建文件中将其指定为依赖项,IDE 还将根据 Maven 配置自动链接它。您可以使用类似的命令导入它:

mvn install:install-file \
   -Dfile=<path-to-file> \
   -DgroupId=<group-id> \
   -DartifactId=<artifact-id> \
   -Dversion=<version> \
   -Dpackaging=<packaging> \
   -DgeneratePom=true

看到这个答案:

警告:切勿在基于 Maven/Gradle 的项目中手动修改 IDE 项目结构设置 - 因为 IDE 将在 Maven/Gradle 重新加载后重置此手动配置。

【讨论】:

  • 是的,这似乎是 Maven 的指定方式。
【解决方案2】:

这是我将罐子添加到 maven POM 的方法:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.5.2</version>
            <executions>
                <execution>
                    <id>FIRST_LIBRARY_ID</id>
                    <phase>initialize</phase>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                    <configuration>
                        <file>lib/my_lib_1.jar</file>
                        <groupId>com.group</groupId>
                        <artifactId>FIRST_LIBRARY_ID</artifactId>
                        <version>1.0</version>
                        <packaging>jar</packaging>
                    </configuration>
                </execution>
                <execution>
                    <id>SECOND_LIBRARY_ID</id>
                    <phase>initialize</phase>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                    <configuration>
                        <file>lib/my_lib_2.jar</file>
                        <groupId>com.group</groupId>
                        <artifactId>SECOND_LIBRARY_ID</artifactId>
                        <version>1.0</version>
                        <packaging>jar</packaging>
                    </configuration>
                </execution>
            </executions>
        </plugin>

然后将它们添加到依赖项中:

    <dependency>
        <groupId>com.group</groupId>
        <artifactId>FIRST_LIBRARY_ID</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
        <groupId>com.group</groupId>
        <artifactId>SECOND_LIBRARY_ID</artifactId>
        <version>1.0</version>
    </dependency>

你可以把你想要的放在&lt;id&gt;标签中,只是每个执行步骤必须有不同的id。 事情发生在&lt;configuration&gt;标签中,插入你的jar文件名,其他值是自定义的,你只需要在依赖项引用中使用相同的&lt;groupId&gt;&lt;artifactId&gt;&lt;version&gt;

【讨论】:

  • 看起来不错,但是通过定义另一个存储库位置然后指定依赖项,难道没有一种稍微不那么冗长的方式吗?为每个要添加的本地 jar 负载添加一个 &lt;execution&gt; 会很困难。顺便说一句,我没有否决这个答案;)
  • @g00se 这就是我发现添加一个 jar 作为 maven 依赖项的全部内容,而无需使用本地 .m2 存储库或在某处拥有带有 maven 存储库的服务器
猜你喜欢
  • 1970-01-01
  • 2018-01-05
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 2013-05-21
  • 2016-11-04
  • 1970-01-01
相关资源
最近更新 更多