gpt4 book ai didi

java - 从Ant到Gradle:可执行的JAR转换

转载 作者:行者123 更新时间:2023-12-03 03:30:14 25 4
gpt4 key购买 nike

我已经坚持了好几天。我目前的任务是将许多 Ant 脚本转换为gradle。我对两者的复杂性都不是很熟悉,所以请原谅我的无知。

我不在代码中使用依赖项或存储库,因为这是用于离线PC的,但是我需要的所有类和jar都可以在本地使用。到目前为止,转换一直在进行中,但是我仍然停留在可执行jar任务的转换上。

(本质上)这是ant脚本:

<target name="makeJar">
<jar destfile="someJar.jar">
<fileset dir="somePlace"/>
<fileset dir="someOtherPlace"/>
<manifest>
<attribute name="Main-Class" value="SOME.ARCHIVE.Main"/>
</manifest>
<zipgroupfileset dir="localFiles" includes="*.jar"/>
</jar>
</target>

SOME.ARCHIVE在本地.jar文件之一中。我认为我的主要问题是,当我运行gradle脚本时,它只会将所有类和jar加载在一起,并且几乎将它们压缩在一起,因此它不是可执行文件,尽管应该执行。 (这将导致找不到SOME.ARCHIVE的主类。)
我比较了从任何一个脚本中提取的.jar文件,并且目录结构存在非常严重的差异-从提取的jar文件中提取的pom各种各样,而gradle脚本不会生成。

我认为主要的问题是我不知道如何复制zipgroupfileset的效果。我以为我可以规避的方式似乎过多(提取jar,使用类文件复制到目录,对该目录进行jaring)。在这一点上,导入ant脚本并从gradle运行它似乎更有意义,但我不想这样做。

这是我的gradle脚本:
task makeJar (type: Jar) {
baseName = "someJar"
from files('somePlace')
from files('someOtherPlace')
from fileTree(dir: 'localFiles', include: '*.jar')

manifest {
attributes 'Main-Class': 'SOME.ARCHIVE.Main'
}
}

编辑:我发布了对我有用的东西。 JBirdVegas的答案可能是更合适的方法。

最佳答案

您可以通过configurations组件将类路径中的所有类打包。当然,如果需要,您可以在中提供更多的逻辑,以仅包括特定文件或您的特定用例。

task fatJar(type: Jar) {
manifest.attributes = jar.manifest.attributes
includeEmptyDirs = jar.includeEmptyDirs
baseName = project.name + '-fat'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}

jar {
manifest {
attributes 'Implementation-Title': 'My executable jar!',
'Implementation-Version': version,
'Main-Class': 'com.example.so.q39209051.Main'
}
includeEmptyDirs false
dependsOn 'fatJar'
}

关于java - 从Ant到Gradle:可执行的JAR转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39209051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com