GVKun编程网logo

使用Gradle从战争中删除/删除文件(gradle war)

12

本文将介绍使用Gradle从战争中删除/删除文件的详细情况,特别是关于gradlewar的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于androi

本文将介绍使用Gradle从战争中删除/删除文件的详细情况,特别是关于gradle war的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于android – 使用Gradle从Artifactory访问依赖项、android – 使用Gradle构建本机代码时会删除符号、android – 如何在文件打包时用Gradle删除原始XML文件中的注释、android-如何使用Gradle动态地从aar中排除文件?的知识。

本文目录一览:

使用Gradle从战争中删除/删除文件(gradle war)

使用Gradle从战争中删除/删除文件(gradle war)

我正在使用gradle构建一个Spring
Boot应用程序,并且希望application.properties从战争中删除该文件,因为该文件将在外部加载(这是在tomcat容器中运行的,而不是嵌入式的)。

我环顾了Gradle文档,试图弄清楚该怎么做,但是我不知道该绑定哪个阶段,以及是否在创建战争之前或之后排除该文件。似乎还有多种处理文件的方法。

我相信Maven会使用packagingExcludes等效的方法。

答案1

小编典典

尽管我无法阻止将文件添加到战争中,但是在战争创建后我能够删除文件-部分原因是此问题的提示:是否有一种从文件中删除文件的快速方法Jar /war无需解压缩jar并重新创建它?

在我的build.gradle文件中,我在war命令后附加了一个exec命令,以便可以在创建war文件后运行命令。该命令将从application.properties战争中删除该文件。这是任务扩展的样子:

war << {    exec {        workingDir ''build/libs''        commandLine ''zip'', ''-d'', "${appName}-${appVersion}.war", ''WEB-INF/classes/application.properties''    }}

简而言之,它将工作目录更改为gradle放置战争的位置,然后使用zip命令从战争中删除文件。

android – 使用Gradle从Artifactory访问依赖项

android – 使用Gradle从Artifactory访问依赖项

我有一个已经发布到我的本地Artifactory存储库的工件,现在我试图将该工件拖入带有gradle的项目中.

但是,我不断收到以下错误:

* What went wrong:
A problem occurred configuring project '':app''.
> Could not resolve all dependencies for configuration '':app:_debugCompile''.
> Could not find com.company.app:myapplication:1.0.0.
     Searched in the following locations:
     https://jcenter.bintray.com/com/company/app/...pom
     https://jcenter.bintray.com/com/company/app/...jar

     file:/Users/user/Library/Android/sdk/extras/android/m2repository/com/company/app...pom
     file:/Users/user/Library/Android/sdk/extras/android/m2repository/com/company/app...jar
     file:/Users/user/Library/Android/sdk/extras/google/m2repository/com/company/app...pom
     file:/Users/user/Library/Android/sdk/extras/google/m2repository/com/company/app....jar

此错误表明它甚至没有查看本地神器库.下面是我的build.gradle文件

项目级build.gradle

buildscript {
    repositories {
        jcenter()
        maven {
            url ''${artifactory_contextUrl}/libs-release-local''
            credentials {
                username = "${artifactory_user}"
                password = "${artifactory_password}"
            }
        }
    }
    dependencies {
        classpath ''com.android.tools.build:gradle:1.1.0''
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.0"
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

App Level build.gradle

allprojects{
    apply plugin: "com.jfrog.artifactory"
}

dependencies {
    compile filetree(dir: ''libs'',include: [''*.jar''])
    compile ''com.company.app:myapplication:1.0.0''
}

解决方法

问题是

> maven url需要在buildscript之外
> maven url需要处于App级别,而不是Project级别build.gradle

以下是我当前的build.gradle文件:

项目级build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath ''com.android.tools.build:gradle:1.1.0''
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

App Level build.gradle

repositories {
    maven {
        url ''${artifactory_contextUrl}/libs-release-local''
        credentials {
            username = "${artifactory_user}"
            password = "${artifactory_password}"
        }
    }
}
dependencies {
    compile filetree(dir: ''libs'',include: [''*.jar''])
    compile ''com.company.app:myapplication:1.0.0''
}

注意:我删除了jfrog插件,因为只有在发布到Artifactory时才需要它.

android – 使用Gradle构建本机代码时会删除符号

android – 使用Gradle构建本机代码时会删除符号

在我的 Android项目中,使用最新的Gradle构建工具,我有一个带有本机C代码的文件和一些简单的函数. C文件中包含的唯一内容是string.h和jni.h,函数只返回String和primitives.除了其他源文件夹(java,res等)之外,该文件还放在jni目录中.

当我构建应用程序时,它编译C代码,生成.so文件并将其包含在我的APK中.问题是.so文件删除了所有符号.

检查放在build / intermediate / ndk / obj中的中间.so文件时,所有符号仍然存在.因此,在生成第一个.so文件之后的某个地方,当它被打包时,一切都被剥离了.

使用命令行ndk-build构建.so文件时,一切正常并且包含符号.

这是Android Gradle插件中的错误(我使用的是最新的!)或者我错过了什么?

解决方法

符号位于:src / main / obj / local
所以添加到build.grade:
android.sources {
    main {
        jni {
            source {
                srcDir 'src/main/none'
            }
        }
        jniLibs {
            source {
                srcDir 'src/main/obj/local'
            }
        }
    }
}

然后转到Debug Configuration->调试器并添加到Symbol目录:
应用程序/建立/中间体/ jniLibs

之后我能够调试我的本机代码.

android – 如何在文件打包时用Gradle删除原始XML文件中的注释

android – 如何在文件打包时用Gradle删除原始XML文件中的注释

我的项目在我的 Android项目的原始资源目录中有XML文件:

当我打包在.apk文件中时,我想从这些文件中删除评论(<! - ... - >):

原始文件样本:

<?xml version="1.0" encoding="utf-8"?>
    <celebrations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:noNamespaceSchemaLocation="celebrations_schema.xsd">

    <!-- This is a very important comment useful during development -->
    <celebration name="celebration 1" type="oneTime" ... />

    <!-- This is another very important comment useful during development -->
    <celebration name="celebration 2" type="reccurent" ... />
</celebrations>

预期过滤文件:

<?xml version="1.0" encoding="utf-8"?>
<celebrations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:noNamespaceSchemaLocation="celebrations_schema.xsd">
    <celebration name="celebration 1" type="oneTime" ... />
    <celebration name="celebration 2" type="reccurent" ... />
</celebrations>

我找到了一些有趣的类似解决方案here,但我无法管理它的工作.在我的应用程序build.gradle中添加这些行

processResources {
    filesMatching('**/myxmlfiletobestrippedfromcomments.xml') {
        filter {
            String line -> line.replaceAll('<!--.*-->','')
        }
    }
}

会产生以下错误:

Error:(86,0) Gradle DSL method not found: 'processResources()'

对于从java代码打开和解析XML文件,我使用以下方法:

InputStream deFinition = context.getResources().openRawResource(resId);
...
try {
    XmlPullParser parser = Xml.newPullParser();
    parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES,false);
    parser.setInput(deFinition,null);
    parser.nextTag();
    return parseCelebrations(parser);
} finally {
    deFinition.close();
}

解决方法

默认的xml的评论将不会打包成apk,你可以反编译来测试它.

android-如何使用Gradle动态地从aar中排除文件?

android-如何使用Gradle动态地从aar中排除文件?

我有一个包含(并在构建模块时构建)本机代码的android库(aar):

apply plugin: 'com.android.library'

android {
  compileSdkVersion 16
  buildToolsversion "25.0.0"

  defaultConfig {
    minSdkVersion 11
    targetSdkVersion 16
    versionCode 1
    versionName "1.0"

    ndk {
      abiFilters 'armeabi-v7a'
    }
  }

  externalNativeBuild {
    ndkBuild {
      path 'jni/Android.mk'
    }
  }

  sourceSets {
    main {
      manifest.srcFile 'AndroidManifest.xml'
      java.srcDirs = ['src']
      res.srcDirs = ['res']
      jni.srcDirs = ['jni']
    }
  }

  packagingOptions {
    exclude '/lib/armeabi-v7a/libv8.cr.so'
    exclude '/lib/armeabi-v7a/libv8_libbase.cr.so'
     // Todo : generate dynamically from `SHARED_V8_LIB_FILENAMES`
  }
}

我修改了Android.mk文件,使其具有不同的配置,具体取决于SHARED_V8_LIB_FILENAMES环境变量:

...
# Report configuration
ifeq ($(SHARED_V8_LIB_FILENAMES),)
# static
$(info [Configuration] Linking statically with built-in v8)
else
# dynamic

define info_define
    $(info [Configuration] Linking dynamically with shared v8 library ./libfoo-binaries/android_$(TARGET_ARCH_ABI)/$1)
endef
$(foreach item,$(SHARED_V8_LIB_FILENAMES),$(eval $(call info_define,$(item))))
endif
...

我如何修改build.gradle以生成依赖于环境变量SHARED_V8_LIB_FILENAMES的packageOptions部分?我需要检查是否设置了变量,使用空格分隔符对其进行了解析,并添加了要从最终aar文件中排除的文件列表.

解决方法:

其实我自己就能做到:

apply plugin: 'com.android.library'

android {
  compileSdkVersion 16
  buildToolsversion "25.0.0"

  defaultConfig {
    minSdkVersion 11
    targetSdkVersion 16
    versionCode 1
    versionName "1.0"

    ndk {
      abiFilters 'armeabi-v7a'
    }
  }

  externalNativeBuild {
    ndkBuild {
      path 'jni/Android.mk'
    }
  }

  sourceSets {
    main {
      manifest.srcFile 'AndroidManifest.xml'
      java.srcDirs = ['src']
      res.srcDirs = ['res']
      jni.srcDirs = ['jni']
    }
  }

  def sharedV8LibFilesSet = []
  def sharedV8LibFiles = System.getenv('SHARED_V8_LIB_FILENAMES')
  if (sharedV8LibFiles != null) {
    def sharedV8LibFilesArray = sharedV8LibFiles.split(' ')
    sharedV8LibFilesArray.each { eachFileName ->
      sharedV8LibFilesSet.add("**/" + eachFileName)
      println "[Configuration] Excluding shared v8 library " + eachFileName + " from AAR"
    }
  } else {
    println "[Configuration] No shared v8 libraries excluded from AAR"
  }

  packagingOptions {
    excludes = sharedV8LibFilesSet
  }
}

任何代码样式的更改/改进表示赞赏.

今天的关于使用Gradle从战争中删除/删除文件gradle war的分享已经结束,谢谢您的关注,如果想了解更多关于android – 使用Gradle从Artifactory访问依赖项、android – 使用Gradle构建本机代码时会删除符号、android – 如何在文件打包时用Gradle删除原始XML文件中的注释、android-如何使用Gradle动态地从aar中排除文件?的相关知识,请在本站进行查询。

本文标签: