我正在尝试创建一个在Web应用程序中使用的Java库(jar),但我正在努力与依赖关系。
说,如果我想要这个:
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,但我不希望在shout.jar中打包apache-commons.jar。相反,我想找到一种方法(如果可能的话)让Gradle或Maven自动找出将使用shout.jar的web应用程序中shout.jar需要的依赖项。
我尝试使用Gradle(应用java-library插件)和Maven(使用jar插件)构建lib,但是当我将shout.jar作为Gradle依赖项时 - 它将无法解析StringUtils .. 。
对于Gradle而言,我需要在jar方面做些什么吗?Maven对解决我的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
如果我不能很好地解释自己,我道歉。
谢谢。
答案 0 :(得分:1)
如果您的应用程序是maven项目,则应将以下依赖项添加到pom.xml中:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
答案 1 :(得分:0)
好的,所以我找到了问题的答案......
我的问题是我正在创建一个JAR文件并将其复制到lib文件夹,然后指示Gradle从libs文件夹中获取JAR。
我应该做的是做mvn install(在Shout proj上)并把它放在我的本地仓库中,然后让Gradle来处理它。像这样:
group 'michal'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenLocal()
}
dependencies {
compile group: 'michal', name: 'shout', version: '1.0-SNAPSHOT'
}