java在Intellij IDE中,特别是Android Studio中,如何创建并运行具有依赖项的可执行jar?
我试图通过gradle创建并运行一个可执行jar。这就是我现在的gradle的样子:
task jarTask(type: Jar) {
baseName = 'my-main-class'
from 'build/classes/main'
}
task createJarWithDependencies(type: Jar) {
manifest {
attributes 'Implementation-Title': 'Sample Jar',
'Implementation-Version': 1,
'Main-Class':'com.example.MyMainClass'
}
baseName = "my-main-class-with-dependencies"
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
with jarTask
}
configurations {
jarConfiguration
}
artifacts {
jarConfiguration jarTask
}
// This is the task that I call with ./gradlew to execute my jar
task runMyJar(type: JavaExec) {
classpath files('build/libs/my-main-class-with-dependencies.jar')
main 'com.example.MyMainClass'
args = ["param1","param2"]
outputs.upToDateWhen { false }
}
runMyJar.dependsOn(createJarWithDependencies, build)
我从下面的堆栈溢出答案/参考中获得了这些方法: Android Studio export jar with dependencies Android studio - How to use an executable jar file from gradle
但是,当我运行./gradlew clean runMyJar
(甚至只是./gradlew runMyJar
)时,会收到以下错误消息:
Error: Could not find or load main class com.example.MyMainClass
有人能指出我的可执行jar在类中找不到主方法的原因吗?我有什么遗漏吗
# 1 楼答案
由于我在这个解决方案上运气不太好,所以我通过执行以下操作来解决这个问题:
但这不是我想要的解决方案,因为这种方法不会从这个模块引用的其他模块中提取依赖项,这正是我试图解决的问题。为了做到这一点,我最终要做的是在那些“其他”模块上复制/粘贴相同的方法,并为该模块生成一个库,然后将该库复制到该模块的
libs
文件夹中。或者我可以在同一个模块中移动这些依赖代码,这样我就不必处理它了。对于一个不太糟糕的简单应用程序(幸运的是,这是我的情况),但对于一个复杂的应用程序,我不知道该怎么做作为补充参考,这里是我的依赖项部分:
顺便说一句,我正在使用Android Studio IntelliJ IDE来实现这一点(这是我发帖的最初动机)。我的希望是不必创建与其他模块不同的JAR来将其包含到这个模块中,而是一次完成所有工作