有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Intellij和Eclipse无法找到库工件

我在Android studio中有一个库项目,将在Android和Java项目中使用。我将这个库发布到我自己的远程工件库中。aar和。jar格式使用Android Studio附带的maven publish插件。我可以在Android应用程序中正确获取和使用该库,但是当我尝试在Java项目中使用它时,intellij和eclipse无法检测到该库是否存在,即使gradle/maven正在从远程repo获取该库。我尝试过只将aar推到远程回购,并在Java项目中获取,但也没有成功。请注意,我在这个库中没有Android依赖项/资源。下面是用于生成工件并将其推送到远程服务器的脚本

apply plugin: 'com.安卓.library'
apply plugin: 'maven-publish'

安卓.libraryVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${_groupId}-${_artifactId}-${安卓.defaultConfig.versionName}.aar"
    }
}

task sourceJar(type: Jar) {
    from 安卓.sourceSets.main.java.srcDirs
    classifier "sources"
}

task deleteOldJar(type:Delete){
    delete 'release/MyLibrary.jar'
}

task exportJar(type:Copy){
    from('build/intermediates/bundles/release/')
    into('release/')
    include('classes.jar')
    rename('classes.jar','MyLibrary.jar')
}
publishing {
    repositories {
        maven {
            url _remoteRepoUrl
        }
    }
    publications {
        library(MavenPublication) {
            groupId _groupId
            artifactId _artifactId
            version 安卓.defaultConfig.versionName
            artifact(sourceJar)
            artifact(exportJar)
            artifact ("$buildDir/outputs/aar/${_groupId}-${_artifactId}-${安卓.defaultConfig.versionName}.aar") { //aar artifact you want to publish
                builtBy assembleDebug
            }
            //generate pom nodes for dependencies
            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.compile.allDependencies.each { dependency ->
                    println "dependency name is: "+dependency.name
                    if(!dependency.name.equals('unspecified')) {
                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', dependency.group)
                        dependencyNode.appendNode('artifactId', dependency.name)
                        dependencyNode.appendNode('version', dependency.version)
                        dependencyNode.appendNode('type', "aar")
                    }
                    else
                        println "dependency name is unspecified"
                }
            }
        }
    }
}

我做错了什么


共 (1) 个答案

  1. # 1 楼答案

    我找到了解决办法。原来是com。安卓gradle中的库插件在某种程度上干扰了生成的工件,因此只有Android项目可以使用库工件,而不是普通的java项目。由于我的库没有任何布局资源,我可以跳过制作。aar生成一个jar文件。为了生成jar文件并将其发布到远程repo,使用了以下代码段:

    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'idea'
    apply plugin: 'maven-publish'
    
    sourceCompatibility = 1.8
    
    def _remoteRepoUrl = "http://myserver.com/repo"
    def _groupId = group
    def _versionName = version
    
    repositories {
        mavenCentral()
        jcenter()
        maven {
            url _remoteRepoUrl
        }
        flatDir {
            dirs 'libs'
        }
    }
    
    jar {
        from sourceSets.main.output
    }
    
    task jarWithSources(type: Jar) {
        from sourceSets.main.output
        if (gradle.startParameter.taskNames.any{it == "publishToMavenLocal"}) {
            from sourceSets.main.allJava
        }
    }
    
    // Define how maven-publish publishes to the nexus repository
    publishing {
        repositories {
            maven {
                url _remoteRepoUrl
            }
        }
        publications {
            mavenJava(MavenPublication) {
                from components.java
            }
            // publish the <project> jar as a standalone artifact
            mavenJar(MavenPublication) {
                artifact jarWithSources
                //from components.java   can't have both the above line and this
                //artifactId "${jar.baseName}_jar"
                version project.version
            }
        }
    }
    
    eclipse {
        classpath {
            containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
            containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7'
        }
    }