Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Intellij和Eclipse无法找到库工件_Java_Android_Eclipse_Maven_Intellij Idea - Fatal编程技术网

Java Intellij和Eclipse无法找到库工件

Java Intellij和Eclipse无法找到库工件,java,android,eclipse,maven,intellij-idea,Java,Android,Eclipse,Maven,Intellij Idea,我在Android studio中有一个库项目,它将在Android和Java项目中使用。我正在使用Android Studio附带的maven publish插件以.aar和.jar两种格式将这个库发布到我自己的远程工件库中。我可以在Android应用程序中正确获取和使用库,但是当我尝试在Java项目中使用它时,intellij和eclipse无法检测到库是否在那里,即使gradle/maven正在从远程repo获取库。我曾经尝试过只将aar推送到远程回购,并在Java项目中获取,但也没有成功

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

apply plugin: 'com.android.library'
apply plugin: 'maven-publish'

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

task sourceJar(type: Jar) {
    from android.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 android.defaultConfig.versionName
            artifact(sourceJar)
            artifact(exportJar)
            artifact ("$buildDir/outputs/aar/${_groupId}-${_artifactId}-${android.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"
                }
            }
        }
    }
}

我做错了什么

我找到了解决办法。原来gradle中的com.android.library插件在某种程度上弄乱了生成的工件,因此只有android项目可以使用库工件,而不是普通的java项目。因为我的库没有任何布局资源,所以我可以跳过make.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'
    }
}
apply插件:“java”
应用插件:“eclipse”
应用插件:“创意”
应用插件:“maven发布”
sourceCompatibility=1.8
def_remoteRepoUrl=”http://myserver.com/repo"
def_groupId=组
def_versionName=版本
存储库{
mavenCentral()
jcenter()
马文{
url\u remoteRepoUrl
}
弗拉蒂尔{
dirs'libs'
}
}
罐子{
从sourceset.main.output
}
任务jarWithSources(类型:Jar){
从sourceset.main.output
if(gradle.startParameter.taskNames.any{it==“PublishToAvenLocal”}){
来自sourceset.main.allJava
}
}
//定义maven publish如何发布到nexus存储库
出版{
存储库{
马文{
url\u remoteRepoUrl
}
}
出版物{
mavenJava(MavenPublication){
来自components.java
}
//将jar作为独立工件发布
mavenJar(mavenJar出版物){
人工制品与资源
//来自components.java——不能同时包含上述行和以下行
//artifactId“${jar.baseName}\u jar”
版本project.version
}
}
}
蚀{
类路径{
containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER'))
容器'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7'
}
}