【发布时间】:2020-02-06 20:42:49
【问题描述】:
我有一个 maven 项目,其中包含一个使用 gradle 作为 pom 依赖项创建的 jar。 在包含 Jar 的代码中,我引用了 log4j logmanager。 当我尝试访问外部 jar 中的方法时,它会在外部 jar 中的类所引用的 logmanager 上抛出 java.lang.NoClassDefFoundError。
外部 jar 的 build.gradle 是:
plugins {
id 'java'
}
group 'com.somecompany.somethingelse'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.0'
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.0'
}
我使用 gradle clean assemble 构建 jar
我使用 mvn install:install-file 将这个 jar 本地安装到 .m2 中,然后在 pom 中为消费应用程序添加它的依赖项。
我不确定这里发生了什么。
外部Jar类代码
package com.company.something;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public abstract class MyClass{
private static Logger logger = LogManager.getLogger();
public static String myMethod(String someInput){
logger.info("entered myMethod");
......some code goes here.....
}
}
Jar 消费类代码
import com.company.something.MyClass;
public class consumingClass{
public String consumingMethod(){
MyClass.myMethod("someinput");
return "something";
}
}
【问题讨论】:
-
您能否发布一个简单的 Java 代码示例,连同您已经提供的 Gradle 构建脚本,可以证明您遇到的问题?
-
你的意思是消费应用程序的java代码?
-
好吧,实际上最好是两者兼有(库和消费应用程序)。也请显示消费应用程序的 Gradle 构建脚本。顺便说一句,您不需要每次修改时手动将库安装在本地 Maven 仓库中,因为您可以使用 Gradle 的 Composite Build 功能:docs.gradle.org/current/userguide/composite_builds.html
-
添加了代码。此外,使用应用程序是一个 Maven 项目,而不是 gradle。我使用简单的 mvn clean install 构建它