java - 构建依赖于其他库的 Java 库

标签 java maven gradle jar lib

我正在尝试创建一个 Java lib (jar) 以在 Web 应用程序中使用,但我在依赖项方面遇到了一些困难。

比如说,如果我想要这个:

import org.apache.commons.lang3.StringUtils;

public class Shout {

    public static void main(String[] args) {
        new Shout().shout();
    }

    public void shout() {
        StringUtils.upperCase("help!");
    }

}

公开为shout.jar。

以上内容取决于 StringUtils,但我不希望 apache-commons.jar 打包在我的shout.jar 中。相反,我想找到一种方法(如果可能的话)让 Gradle 或 Maven 自动找出在将使用shout.jar 的Web 应用程序中shout.jar 需要哪些依赖项。

我尝试使用 Gradle(应用 java-library 插件)和 Maven(使用 jar 插件)构建一个 lib,但当我将我的shout.jar 作为 Gradle 依赖项时,它仍然无法解析 StringUtils.. .

为了让 Gradle 和 Maven 满意地解决我的 jar 的依赖关系,我需要在 jar 方面做一些特别的事情吗?

更新更多详细信息

抱歉说得有点含糊。我会再次尝试提供更多详细信息。

所以,假设我在 Maven 项目中有 Shout 类。与上面相同:

import org.apache.commons.lang3.StringUtils;

public class Shout {

    public static void main(String[] args) {
        new Shout().shout();
    }

    public void shout() {
        StringUtils.upperCase("help!");
    }

}

它有一个 pom 文件,里面有这个位(项目标签省略):

<groupId>michal</groupId>
<artifactId>shout</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.6</version>
    </dependency>

</dependencies>

现在,如果我运行 Maven jar 插件,我就会有一个名为shout-1.0-SNAPSHOT.jar 的漂亮 jar 文件。

如果我创建另一个名为UsingShout 的项目,这次是带有Gradle 配置的Gradle:

group 'michal'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    flatDir {
        dirs 'libs'
    }

}

dependencies {
    compile group: 'michal', name: 'shout', version: '1.0-SNAPSHOT'
}

我将漂亮的 jar 文件放入 lib 目录中,如下所示:

(btw, the pom.xml is the same as above)

我尝试这样做:

public class UsingShout {

    public static void main(String[] args) {
        new UsingShout().go();    
    }

    private void go() {
        new Shout().shout();
    }

}

我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

如果我没有很好地解释自己,我深表歉意。

谢谢。

最佳答案

如果您的应用程序是 Maven 项目,则应将以下依赖项添加到 pom.xml 中:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.6</version>
</dependency>

关于java - 构建依赖于其他库的 Java 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46977699/

相关文章:

java - 为什么我无法创建 Maven 项目?

Jenkins CloudBees Deployer 插件找不到gradle cloudbees 插件生成的war 文件

java - Eclipse j2ee 和捆绑的 Web 工具平台让我困惑

java - IJKplayer 在播放某些视频时崩溃

java - 驻留在 Wildfly 模块中的 JPA 实体类不会被扫描

java - 如何保持所有版本的RESTful接口(interface)在线?

java - GWT-需要水平打开的披露容器

java - jUnit 问题 - Restful Web 服务的集成测试

java - maven 和 gradle 构建中的依赖 jar 版本不同

mysql - 访问数据MySQL。卡住构建