本文将介绍使用Gradle从战争中删除/删除文件的详细情况,特别是关于gradlewar的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于androi
本文将介绍使用Gradle从战争中删除/删除文件的详细情况,特别是关于gradle war的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于android – 使用Gradle从Artifactory访问依赖项、android – 使用Gradle构建本机代码时会删除符号、android – 如何在文件打包时用Gradle删除原始XML文件中的注释、android-如何使用Gradle动态地从aar中排除文件?的知识。
本文目录一览:- 使用Gradle从战争中删除/删除文件(gradle war)
- android – 使用Gradle从Artifactory访问依赖项
- android – 使用Gradle构建本机代码时会删除符号
- android – 如何在文件打包时用Gradle删除原始XML文件中的注释
- android-如何使用Gradle动态地从aar中排除文件?
使用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访问依赖项
但是,我不断收到以下错误:
* 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构建本机代码时会删除符号
当我构建应用程序时,它编译C代码,生成.so文件并将其包含在我的APK中.问题是.so文件删除了所有符号.
检查放在build / intermediate / ndk / obj中的中间.so文件时,所有符号仍然存在.因此,在生成第一个.so文件之后的某个地方,当它被打包时,一切都被剥离了.
使用命令行ndk-build构建.so文件时,一切正常并且包含符号.
这是Android Gradle插件中的错误(我使用的是最新的!)或者我错过了什么?
解决方法
所以添加到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文件中的注释
当我打包在.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(); }
解决方法
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中排除文件?的相关知识,请在本站进行查询。
本文标签: