我在我的java项目中使用shadowJar。 我想把结果推到神器中。
我的gradle脚本看起来像这样,我不知道如何连接点:
shadowJar {
baseName = 'com.mycompany.myapp'
manifest {
attributes 'Main-Class': 'myapp.starter'
}
}
]
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'maven'
apply plugin: 'com.github.johnrengelman.shadow'
// rep for the project
repositories {
mavenCentral()
maven {
url 'http://repo.company:8081/artifactory/libs-release'
credentials {
username = "${repo_user}"
password = "${repo_password}"
}
}
maven {
url 'http://repo.company:8081/artifactory/libs-snapshot'
credentials {
username = "${repo_user}"
password = "${repo_password}"
}
}
}
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
artifact sourceJar {
classifier "sources"
}
}
}
}
如何编写gradle来获取shadowjar文件?
感谢, 射线。
答案 0 :(得分:6)
publication
部分使用maven-publish
插件确定您要发布的内容。
在您当前的配置中,from components.java
将发布项目的默认jar工件,工件sourceJar
将发布sourceJar。要发布不同的jar,您需要修改(或添加新的)发布。
shadowJar {
baseName = 'myproject-shadow'
classifier = ''
}
publishing {
publications {
shadow(MavenPublication) {
from components.shadow
artifactId = 'myproject-shadow'
}
}
}
jar名称中使用的版本来自project.version。
答案 1 :(得分:3)
[x1,y1]
插件中的API已更改,这适用于我[x'1,y'1]
:http://imperceptiblethoughts.com/shadow/#publishing_shadow_jars
shadow
答案 2 :(得分:2)
你看过https://cmake.org/Bug/view.php?id=10365了吗?这可以帮助您满足您的需求,从Artifactory中解析和部署工件。
您可以使用插件发布,省略' artifactory'来自不发布任何内容的项目的插件。请注意,这不适用于包含约定对象的根项目,因此需要应用插件。 为要应用插件的每个项目手动激活相应的artifactoryPublish Gradle任务。 例如,在我们的Gradle项目示例中,您可以运行: ./gradlew clean api:artifactoryPublish shared:artifactoryPublish
答案 3 :(得分:2)
以下是我使用shadow插件和maven-publish插件让Gradle发布到我们的Nexus仓库所做的工作:(运行发布任务:" gradle publish")
plugins {
id 'com.github.johnrengelman.shadow' version '1.2.4'
}
apply plugin: 'maven-publish'
publishing {
publications {
shadow(MavenPublication) {
from components.shadow
groupId 'myGroupId'
artifactId 'myArtifactId'
}
}
repositories {
maven {
url "http://nexus.mycompany.com/repository/stuff"
credentials {
username = "${System.env.NEXUS_USERNAME}"
password = "${System.env.NEXUS_PASSWORD}"
}
}
}
}
答案 4 :(得分:1)
您可以使用此功能:
plugins {
kotlin("jvm")
`maven-publish`
id("com.github.johnrengelman.shadow") version "6.0.0"
}
publishing {
publications {
val publication = create<MavenPublication>("shadow")
project.shadow.component(publication)
}
}
答案 5 :(得分:0)
有点晚了,但是我想向您展示如何使它工作。也许它可以像我一样帮助某人在这个问题上绊脚石:
build.gradle.kts:
plugins {
java
`maven-publish`
id("com.github.johnrengelman.shadow") version "5.1.0"
}
publishing {
publications {
create<MavenPublication>("maven") {
from(components["java"])
artifact(tasks["shadowJar"])
}
}
repositories {
maven {
/* ... */
}
}
}
上面的示例是用Kotlin编写的,如果您更喜欢Groovy,则需要编写以下代码:
build.gradle:
publishing {
publications {
shadow(MavenPublication) {
from components.java
artifact shadowJar
}
}
}
答案 6 :(得分:0)
没有其他答案考虑多模块项目。对于多模块项目,没有人为每个模块配置发布。相反,它是在根构建文件中完成的。
此外,在多模块项目中,通常只需要将一个模块作为可执行的JAR镜像即可。将影子插件应用于每个模块是没有意义的。
以下是使用Kotlin DSL实现上述所有功能的方法:
在子项目中:
plugins {
id("com.github.johnrengelman.shadow")
}
...
project.tasks.findByName("jar")?.enabled = false
tasks.withType<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar> {
mergeServiceFiles()
archiveClassifier.set("")
manifest {
attributes(mapOf("Main-Class" to "com.mycompany.MainClass"))
}
}
在根项目中:
publications {
create<MavenPublication>("maven") {
afterEvaluate {
val shadowJar = tasks.findByName("shadowJar")
if (shadowJar == null) from(components["java"])
else artifact(shadowJar)
}
artifact(kdocJar)
artifact(sourcesJar)
}
...
}
关键是afterEvaluate
配置。有关详细信息,请参见this。
每个人都在谈论的project.shadow.component(publication)
在根项目中不存在,并且不会在Kotlin DSL中进行编译。 ShadowExtension
仅在应用插件的项目中存在。