java - How can I build a Maven project, as a dependency to the root project, with Gradle? -
i have root project multiple subprojects. initially, we've kept projects separate maven projects i've realized gradle more suitable me use. 1 of subprojects we'd rather not convert gradle project, keep maven project.
so i've tried keep maven project subproject gradle project, building fails because dependencies listed in maven projects pom.xml not included. below experiment
folder/project structure
root (gradle root project) |- api (maven project) |- project (gradle subproject, depends on "api" project) root/settings.gradle
rootproject.name = 'root' def subdirs = rootdir.listfiles(new filefilter() { public boolean accept(file file) { if (!file.isdirectory()) { return false } if (file.name == 'buildsrc') { return false } return new file(file, 'build.gradle').isfile() } }); subdirs.each { file dir -> include dir.name } root/build.gradle
import org.gradle.api.artifacts.* apply plugin: 'base' // add "clean" task root project. subprojects { apply from: rootproject.file('common.gradle') } task mergedjavadoc(type: javadoc, description: 'creates javadoc projects.') { title = 'all modules' destinationdir = new file(project.builddir, 'merged-javadoc') // note: closures below executed lazily. source { subprojects*.sourcesets*.main*.allsource } classpath.from { subprojects*.configurations*.compile*.copyrecursive({ !(it instanceof projectdependency); })*.resolve() } } root/common.gradle
// // file applied every subproject. // apply plugin: 'java' apply plugin: 'maven' string mavengroupid = 'com.mycompany.myproject' string mavenversion = '1.0-snapshot' sourcecompatibility = '1.8' [compilejava, compiletestjava]*.options*.encoding = 'utf-8' repositories { mavencentral(); // may define additional repositories, or remove "mavencentral()". // read more repositories here: // http://www.gradle.org/docs/current/userguide/dependency_management.html#sec:repositories } dependencies { // adding dependencies here add dependencies each subproject. testcompile group: 'junit', name: 'junit', version: '4.10' } string mavenartifactid = name group = mavengroupid version = mavenversion task sourcesjar(type: jar, dependson: classes, description: 'creates jar source files.') { classifier = 'sources' sourcesets.main.allsource } artifacts { archives jar archives sourcesjar } configure(install.repositories.maveninstaller) { pom.project { groupid = mavengroupid artifactid = mavenartifactid version = mavenversion } } task createfolders(description: 'creates source folders if not exist.') dolast { sourcesets*.allsource*.srcdirs*.each { file srcdir -> if (!srcdir.isdirectory()) { println "creating source folder: ${srcdir}" srcdir.mkdirs() } } } root/api/pom.xml
<?xml version="1.0" encoding="utf-8"?> <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>com.mycompany.myproject</groupid> <artifactid>api</artifactid> <version>1.0-snapshot</version> <packaging>jar</packaging> <properties> <project.build.sourceencoding>utf-8</project.build.sourceencoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/de.dev-eth0.dummycreator/dummy-creator --> <dependency> <groupid>de.dev-eth0.dummycreator</groupid> <artifactid>dummy-creator</artifactid> <version>1.3</version> </dependency> </dependencies> </project> root/project/build.gradle
if (!hasproperty('mainclass')) { ext.mainclass = 'com.mycompany.myproject.helloworld' } dependencies { compile project(":api") } root/api/src/main/java/com/mycompany/myproject/api/api.java
package com.mycompany.myproject.api; import org.dummycreator.dummycreator; public class api { public static void sayhello() { system.out.println("hello api!"); dummycreator dc = new dummycreator(); integer integer = dc.create(integer.class); system.out.println("integer: " + integer); } } when building "project", following output:
executing: gradle build arguments: [-c, c:\users\birger\desktop\test\root\settings.gradle] c:\users\birger\desktop\test\root\api\src\main\java\com\mycompany\myproject\api\api.java:3: error: package org.dummycreator not exist import org.dummycreator.dummycreator; ^ c:\users\birger\desktop\test\root\api\src\main\java\com\mycompany\myproject\api\api.java:10: error: cannot find symbol dummycreator dc = new dummycreator(); ^ symbol: class dummycreator location: class api c:\users\birger\desktop\test\root\api\src\main\java\com\mycompany\myproject\api\api.java:10: error: cannot find symbol dummycreator dc = new dummycreator(); ^ symbol: class dummycreator location: class api 3 errors :api:compilejava failed failure: build failed exception. * went wrong: execution failed task ':api:compilejava'. > compilation failed; see compiler error output details. * try: run --stacktrace option stack trace. run --info or --debug option more log output. build failed total time: 0.106 secs build failure (see notifications window stacktrace): gradle build so, what's easiest way make maven subproject "build normal", subproject of gradle root project, without having convert gradle project?
if called mvn install on maven project, use
repositories { mavenlocal() } in gradle project depend on jar via group/artifact/version. gradle's maven dependency integration of transitive dependencies pom
Comments
Post a Comment