首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Gradle & Java:将文件作为依赖项添加

Gradle & Java:将文件作为依赖项添加
EN

Stack Overflow用户
提问于 2016-12-14 11:00:51
回答 2查看 2K关注 0票数 0

我是格拉德尔·诺布。我有一个非常简单的项目,我试图使用这个项目来更好地理解依赖关系,以及如何用Gradle导入Java中的不同文件。我有以下文件结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ls
build.gradle  dependencies  src

$ ls dependencies/
Hello.java Hello.jar

$ ls src/
Temp.java

有以下三个文件

build.gradle:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apply plugin: 'java'

dependencies {
        compile fileTree(dir: 'dependencies', include:'**/*.jar')
}

sourceSets {
    main {
        java {
            srcDirs = ['src']
        }
    }
}

task compile(type: JavaCompile) {
    source = file('src')
}

Hello.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Hello{
        int l = 1;
        public Hello(){
                System.out.println(l);
        }

        public static void main(String[] args){
                Hello h = new Hello();
        }
}

Temp.java:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Temp {

        public static void main( String[] args0){
        Hello h = new Hello();
        }

}

当在命令行上运行gradle jar时,看起来gradle构建成功,但是当试图运行jar时.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   $ java -classpath build/libs/testproject.jar Temp
Exception in thread "main" java.lang.NoClassDefFoundError: Hello
        at Temp.main(Temp.java:5)
Caused by: java.lang.ClassNotFoundException: Hello
        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

根据Gradle上的文档,我似乎看不出我做错了什么。我的依赖规范在build.gradle中做什么,为什么不允许Temp.java看到Hello.java?我该怎么解决这个问题?

提前谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-14 20:20:40

依赖项或子项目中的jar不会按默认值打包到根项目jar。

如果要将其添加到根项目的jar中,可以修改根项目的jar任务并添加类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jar {
    //...
    from 'dependencies/classes/Hello.class'
    //...
}

然后再次运行jar任务来创建jar,./gradlew jar

此时,您的程序应该正常运行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ java -cp build/lib/testproject.jar Temp

更简单的解决方案,在根项目中应用application插件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apply plugin: 'application'
mainClassName = 'Temp'

并使用./gradlew run运行程序。

有一些文章已经讨论了这个主题,请参阅

https://www.mkyong.com/gradle/gradle-create-a-jar-file-with-dependencies/

票数 2
EN

Stack Overflow用户

发布于 2016-12-15 02:16:05

如果你是个贵族..。我建议你遵循格拉德尔非常明智的惯例

  1. src/main/java用于java源
  2. 资源的src/main/资源(xml等添加到jar/类路径中)
  3. 用于测试java源的src/ test /java
  4. src/测试/测试资源
  5. jars应该从存储库中引用,jars不应该驻留在项目下的lib目录中(也不应该被添加到源代码管理中)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41150174

复制
相关文章
【Android Gradle 插件】Gradle 依赖管理 ⑩ ( dependencies 依赖配置项 configurations )
添加构建依赖项 参考文档 : https://developer.android.google.cn/studio/build/dependencies
韩曙亮
2023/03/30
1.3K0
【Android Gradle 插件】Gradle 依赖管理 ⑩ ( dependencies 依赖配置项 configurations )
【Android Gradle 插件】Gradle 依赖管理 ⑨ ( implementation project 导入依赖库 Module | 导入aar文件作为依赖 | 先配置仓库再导入依赖 )
org.gradle.api.Project 配置 ( build.gradle 根配置 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html
韩曙亮
2023/03/30
1.6K0
【Android Gradle 插件】Gradle 依赖管理 ⑨ ( implementation project 导入依赖库 Module | 导入aar文件作为依赖 | 先配置仓库再导入依赖 )
【Android Gradle 插件】Gradle 依赖管理 ⑧ ( implementation fileTree 引入jar文件依赖 | implementation files 引入文件依赖 )
org.gradle.api.Project 配置 ( build.gradle 根配置 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html
韩曙亮
2023/03/30
2.2K0
Gradle 将 library module 发布到本地仓库,并添加本地依赖
将module发布到本地maven仓库 在本地准备一个目录,当做maven仓库 在项目的 gradle.properties 配置仓库信息(主要是POM文件信息) 在module的 build.gradle 配置插件,任务,及代码信息 执行发布任务 本地 maven 查看 引用本地仓库中的包 1. 准备目录 Example: E:\libs\localMaven 2. 配置仓库信息 在项目的 gradle.properties 中配置属性信息 Example: # 包信息 PROJ_GROUP= 一般为公司
佛系编码
2018/05/22
5.5K0
java -jar 执行jar包,并添加额外目录作为依赖包
可以通过如下指令使用 java -Djava.ext.dirs=$JAVA_HOME/jre/lib/ext:/xxx/xxx/path1:/xxx/xxx/path2 -jar xxx.jar arg1 arg2 arg3 参数解读 java -D 是添加一个系统参数,java.ext.dirs 是一个系统参数的key,java回去该路径下寻找相关jar包,和class-path 差不多,不过java.ext.dirs可以指定一个文件夹。 注意点 需要注意的是 java.ext.dirs 本身是
solve
2019/10/30
3.2K0
【Android Gradle 插件】自定义 Gradle 任务 ⑤ ( 为自定义 Gradle 任务添加依赖任务 | Gradle 任务依赖执行顺序控制 )
如果 Gradle 任务 A 的执行 是在 Gradle 任务 B 执行的基础上的 , 那么可以将任务 B 设置为 任务 A 的依赖 ;
韩曙亮
2023/03/30
1.1K0
【Android Gradle 插件】自定义 Gradle 任务 ⑤ ( 为自定义 Gradle 任务添加依赖任务 | Gradle 任务依赖执行顺序控制 )
maven 解包依赖项中的文件
使用goal:unpack-dependencies 在配置参数includeArtifactIds中指定要解包的模块制件ID
路过君
2022/07/20
2.4K0
【Android Gradle 插件】Gradle 依赖管理 ⑤ ( dependencies 依赖项拆分 | 依赖组 | 依赖名称 | 依赖版本号 | 动态指定依赖版本号 | 使用命令行查看模块 )
添加构建依赖项 参考文档 : https://developer.android.google.cn/studio/build/dependencies
韩曙亮
2023/03/30
1.9K0
【Android Gradle 插件】Gradle 依赖管理 ⑤ ( dependencies 依赖项拆分 | 依赖组 | 依赖名称 | 依赖版本号 | 动态指定依赖版本号 | 使用命令行查看模块 )
学界 | 将未来信息作为正则项,Twin Networks加强RNN对长期依赖的建模能力
选自arXiv 机器之心编译 参与:蒋思源 Yoshua Bengio 等人提出了一种新型循环神经网络,该网络由前向和反向循环网络组成,并且前向和反向隐藏状态之间有一定的紧密度而共同预测相同的符号。因
机器之心
2018/05/09
7710
【Android Gradle 插件】Gradle 依赖管理 ③ ( build.gradle#dependencies 依赖分组 | configurations 自定义依赖分组 )
分组是在 org.gradle.api.Project 中的 configurations 中配置的 ,
韩曙亮
2023/03/30
5500
Java将内容追加/添加到现有文件
如果您希望代码创建一个新文件并删除以前的现有文件,则FileWriter可以轻松代替它。要替换现有文件中的所有内容,请使用以下命令:
用户7886150
2021/04/28
3.1K0
macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java
OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的IPP进行加速处理。
Mintimate
2021/09/28
6.4K1
macOS和Linux上手动编译OpenCV并作为依赖添加到Python/C++/Java
【Android Gradle 插件】Android 依赖管理 ② ( 为工程配置依赖仓库 | 为工程构建添加依赖仓库 | classpath 引入依赖库 | 配置依赖仓库 )
在 根目录 的 build.gradle 顶层构建脚本 中 , 配置的 allprojects 脚本块 , 是 作用于所有的工程的 ,
韩曙亮
2023/03/30
1.6K0
【Android Gradle 插件】Android 依赖管理 ② ( 为工程配置依赖仓库 | 为工程构建添加依赖仓库 | classpath 引入依赖库 | 配置依赖仓库 )
【Android Gradle 插件】Gradle 依赖管理 ⑥ ( dependencies 依赖查找路径 | dependencies 依赖冲突 | dependencies 依赖库层级分析 )
在我的电脑的 SDK\extras\android\m2repository\com\android\support 路径中 , 就是依赖中常用的支持库 :
韩曙亮
2023/03/30
1.7K0
【Android Gradle 插件】Gradle 依赖管理 ⑥ ( dependencies 依赖查找路径 | dependencies 依赖冲突 | dependencies 依赖库层级分析 )
【Android Gradle 插件】Gradle 依赖管理 ④ ( Android Gradle 插件中注册的依赖分组 | implementation | api | compileOnly )
添加构建依赖项 参考文档 : https://developer.android.google.cn/studio/build/dependencies
韩曙亮
2023/03/30
5590
【Android Gradle 插件】Gradle 依赖管理 ④ ( Android Gradle 插件中注册的依赖分组 | implementation | api | compileOnly )
【Android Gradle 插件】Gradle 依赖管理 ⑦ ( dependencies 传递依赖设置 | transitive 关闭依赖传递配置 | exclude 排除子依赖配置 )
默认情况下 , 在 build.gradle 中配置 com.facebook.fresco:fresco:0.14.0 依赖 ,
韩曙亮
2023/03/30
9620
Gradle依赖管理解析
当我们在讨论依赖时,通常指的是外部依赖,例如其他开发者提供的依赖库。手动管理依赖会是一个大麻烦。你必须找到该依赖,下载JAR文件,将其拷贝到项目,引用它。通常这些JAR 文件在它们的名称中没有版本号,所以你需要添加JAR的版本,以便知道什么时候更新。你还需要确保依赖库中存储在了源代码管理系统,以便团队成员在没有手动下载这些依赖时,也可以使用基于依赖的代码。
博文视点Broadview
2020/06/12
2.1K0
Gradle依赖管理解析
gradle 排除jar包依赖
1.直接在configuration中排除  configurations {     compile.exclude module: 'commons'     all*.exclude group: 'org.gradle.test.excludes', module: 'reports' } 2.在具体的某个dependency中排除 dependencies {     compile("org.gradle.test.excludes:api:1.0") {         exclude mo
似水的流年
2019/12/05
5.6K0
node添加依赖
node 版本:v6.11.2 npm 版本:3.10.10 开发(在UI目录下)
Twcat_tree
2022/11/30
4540
9--Gradle进阶 - Gradle任务的依赖方式
因为任务有可能依赖其他任务执行完毕之后,才可以开始执行。对于这种情况,我们就可以通过任务的依赖来控制。
Devops海洋的渔夫
2023/09/01
5740
9--Gradle进阶 - Gradle任务的依赖方式

相似问题

将Java模块jar作为依赖项添加到Gradle项目中

10

将SWT作为Gradle依赖项导入

28

如何将gradle java项目作为依赖项添加到Android Studio

15

Gradle:添加依赖项

25

添加gradle依赖项

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文