Конвертировать maven jar и скопировать плагин ресурсов в gradle
Я новичок в gradle и пытаюсь преобразовать мой POM в gradle.build. Я преобразовал часть зависимостей и теперь преобразую часть плагина. У меня есть подписка в моем ПОМ
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>${maven-dependency-plugin.version}</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeGroupIds>
junit, org.apache.logging.log4j, org.springframework, aopalliance, org.springframework.data, javax.inject,
org.hibernate, javax.el, com.microsoft.sqlserver, org.apache.commons, com.jcraft, com.sun.mail,
org.apache.velocity, commons-lang, commons-logging, commons-collections, org.jboss.logging,
org.jboss, org.javassist, dom4j, javax.transaction
</includeGroupIds>
<outputDirectory>${project.build.directory}/dependency-jars/</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-jar-plugin.version}</version>
<configuration>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
<exclude>**/*.vm</exclude>
<exclude>**/*.txt</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>dependency-jars/</classpathPrefix>
<mainClass>com.softech.ls360.integration.BatchImport</mainClass>
</manifest>
<manifestEntries>
<Class-Path>conf/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>install</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/conf</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.vm</include>
<include>**/*.txt</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Когда я запустил этот POM, я получил такую структуру
Теперь я попробовал это со следующей задачей Gradle Jar
apply plugin: 'application' // implicitly apply java and distribution plugin
apply plugin: 'eclipse'
sourceCompatibility = 1.8
targetCompatibility = sourceCompatibility
mainClassName = "com.softech.ls360.integration.BatchImport"
version = '1.0'
ext {
log4jGroupId = "org.apache.logging.log4j"
springFrameworkGroupId = "org.springframework"
springFrameworkVersion = "4.2.4.RELEASE"
junitVersion = "4.12"
....
}
dependencies {
compile group: log4jGroupId, name: 'log4j-api', version: log4jVersion
....
runtime group: 'org.jboss.logging', name: 'jboss-logging', version: jbossLoggingVersion
....
testCompile group: 'junit', name: 'junit', version: junitVersion
}
jar {
// Keep jar clean:
exclude '**/*.properties', '**/*.xml', '**/*.vm', '**/*.txt'
//from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
manifest {
attributes ('Implementation-Version': version,
'Main-Class': "$mainClassName",
'Class-Path': "conf/" + " " + configurations.runtime.files.collect {"dependency-jars/$it.name" }.join(' ')
)
}
}
Тогда я получил следующую банку
Это генерирует правильный путь к классу в jar. Но build/libs/
папка содержит только банку, нет dependency-jars
а также conf
папки в нем. Как я могу создать эти папки, поэтому, когда я запускаю jar задачи, он создает jar в build/libs/
папку, а также создать dependency-jars
папка со всеми банками в ней. А также conf
папка в build/libs
со всеми .propeties, .xml, .vm, .txt
файлы из src/main/resources/
папка.
Спасибо
1 ответ
Хм, я попробовал следующее, и это сработало. Я не знаю, насколько хорош этот подход. Но если у кого-то есть лучший способ сделать это, пожалуйста, оставьте ответ тоже.
....
task wrapper(type: Wrapper) {
gradleVersion = '2.10'
}
task copyJars(type: Copy) {
from configurations.runtime
into "$buildDir/libs/dependency-jars"
}
task copyConfigurationFiles(type: Copy) {
description 'Copies the configurations files src/main/resources directory (from) to the target directory(into).'
from "src/main/resources"
into "$buildDir/libs/conf"
include '**/*.properties', '**/*.xml', '**/*.vm', '**/*.txt'
}
task copyFiles(dependsOn: [copyJars, copyConfigurationFiles])
jar {
dependsOn copyFiles
// Keep jar clean:
exclude '**/*.properties', '**/*.xml', '**/*.vm', '**/*.txt'
manifest {
attributes ('Implementation-Version': version,
'Main-Class': "$mainClassName",
'Class-Path': "conf/" + " " + configurations.runtime.files.collect {"dependency-jars/$it.name" }.join(' ')
)
}
}
После этого я просто запускаю задачу jar. И он создал папку jar, а также папку dependency-jars со всеми файлами jar, а также папку conf со всеми файлами конфигурации в ней. Так же, как когда я сделал maven install
Спасибо