java Gradle 找不到依赖项
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/30932526/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Gradle does not find dependencies
提问by zero_coding
I am trying to use Gradle and the file looks like:
我正在尝试使用 Gradle,文件如下所示:
// Apply the java plugin to add support for Java
apply plugin: 'java'
// In this section you declare where to find the dependencies of your project
repositories {
// Use 'jcenter' for resolving your dependencies.
// You can declare any Maven/Ivy/file repository here.
mavenCentral()
jcenter()
}
jar {
manifest {
attributes 'Main-Class': 'execute.Entry'
}
}
// In this section you declare the dependencies for your production and test code
dependencies {
// The production code uses the SLF4J logging API at compile time
compile 'org.slf4j:slf4j-api:1.7.12'
compile 'org.apache.logging.log4j:log4j:2.3'
// Declare the dependency for your favourite test framework you want to use in your tests.
// TestNG is also supported by the Gradle Test task. Just change the
// testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add
// 'test.useTestNG()' to your build script.
testCompile 'junit:junit:4.12'
}
As you can see, I've added two dependencies and want to use in a class
如您所见,我添加了两个依赖项并希望在类中使用
package execute;
import message.*;
import org.apache.log4j.Logger;
public class Entry {
public static void main(String[] args) {
Service s = new Service();
String msg = s.GetMessage();
LOGGER.info("Received msg: " + msg);
}
}
When I execute the statement gradle assemble
, I've got the compiler error.
当我执行语句时gradle assemble
,出现编译器错误。
D:\Java\entrypoint\src\main\java\execute\Entry.java:4: error: package org.apache.log4j does not exist
import org.apache.log4j.Logger;
^
D:\Java\entrypoint\src\main\java\execute\Entry.java:12: error: cannot find symbol
LOGGER.info("Received msg: " + msg);
^
symbol: variable LOGGER
location: class Entry
2 errors
:compileJava FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 6.261 secs
Compilation failed; see the compiler error output for details.
What am I doing wrong?
我究竟做错了什么?
UpdateI changed my code to this:
更新我将代码更改为:
package execute;
import message.*;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
public class Entry {
private static final Logger logger = LogManager.getLogger("HelloWorld");
public static void main(String[] args) {
Service s = new Service();
String msg = s.GetMessage();
logger.info("Hello, World!");
}
}
The compiler complain:
编译器抱怨:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
at execute.Entry.<clinit>(Entry.java:9)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Update 2
After execute:
更新 2
执行后:
>gradle dependencies
:dependencies
------------------------------------------------------------
Root project
------------------------------------------------------------
archives - Configuration for archive artifacts.
No dependencies
compile - Compile classpath for source set 'main'.
\--- org.apache.logging.log4j:log4j-api:2.3
default - Configuration for default artifacts.
\--- org.apache.logging.log4j:log4j-api:2.3
runtime - Runtime classpath for source set 'main'.
\--- org.apache.logging.log4j:log4j-api:2.3
testCompile - Compile classpath for source set 'test'.
+--- org.apache.logging.log4j:log4j-api:2.3
\--- junit:junit:4.12
\--- org.hamcrest:hamcrest-core:1.3
testRuntime - Runtime classpath for source set 'test'.
+--- org.apache.logging.log4j:log4j-api:2.3
\--- junit:junit:4.12
\--- org.hamcrest:hamcrest-core:1.3
BUILD SUCCESSFUL
回答by HELOX
It seems like you still need the log4j dependency itself: compile: 'log4j:log4j:versionX'
看起来您仍然需要 log4j 依赖项本身: compile: 'log4j:log4j:versionX'
Update 1:
更新 1:
And ofcourse you should add:
当然你应该添加:
private static final Logger logger = Logger.getLogger(DrglMutatieBerichtMdb.class);
Update 2:
更新2:
I use the following dependencies:
我使用以下依赖项:
compile 'log4j:log4j:1.2.17'
compile 'org.slf4j:slf4j-api:1.7.5'
compile 'org.slf4j:slf4j-log4j12:1.7.5'
Than in the code I import:
比在我导入的代码中:
import org.apache.log4j.Logger;
And use the logger like this:
并像这样使用记录器:
private static final Logger logger = Logger.getLogger(DrglMutatieBerichtMdb.class);
private static void testLogger(){
logger.debug("The logger works!");
}
回答by maxb
Instead of
代替
import org.apache.log4j.Logger;
use
利用
import org.apache.logging.log4j.Logger;
and define the instance of LOGGER
并定义 LOGGER 的实例
private static final Logger LOGGER = LogManager.getLogger("HelloWorld");
See this sample http://logging.apache.org/log4j/2.x/manual/api.html
请参阅此示例 http://logging.apache.org/log4j/2.x/manual/api.html
this has nothing todo with Gradle
这与 Gradle 无关
回答by dr0i
I also had to add to the dependencies:
我还必须添加到依赖项:
compile "org.apache.logging.log4j:log4j-api:2.3"
compile "org.apache.logging.log4j:log4j-api:2.3"