在Java中,您经常会看到包含一些元文件的META-INF文件夹.这个文件夹的目的是什么,我可以放在那里?
我正在使用SBT(在IntelliJ IDEA中)构建一个简单的Scala项目.
我想知道构建Uber JAR文件(又名Fat JAR,Super JAR)的最简单方法是什么.
我目前正在使用SBT但是当我将我的JAR文件提交给Apache Spark时,我收到以下错误:
线程"main"中的异常java.lang.SecurityException:Manifest主要属性的签名文件摘要无效
或者在编译期间出现此错误:
java.lang.RuntimeException:deduplicate:在以下位置找到不同的文件内容:
PATH\DEPENDENCY.jar:META-INF/DEPENDENCIES
PATH\DEPENDENCY.jar:META-INF/MANIFEST.MF
它看起来是因为我的一些依赖项包括需要在最终的Uber JAR文件中删除的签名文件(META-INF).
我尝试使用这样的sbt-assembly插件:
/project/assembly.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.12.0")
Run Code Online (Sandbox Code Playgroud)
/project/plugins.sbt
logLevel := Level.Warn
Run Code Online (Sandbox Code Playgroud)
/build.sbt
lazy val commonSettings = Seq(
name := "Spark-Test"
version := "1.0"
scalaVersion := "2.11.4"
)
lazy val app = (project in file("app")).
settings(commonSettings: _*).
settings(
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.2.0",
"org.apache.spark" %% "spark-streaming" % "1.2.0",
"org.apache.spark" % "spark-streaming-twitter_2.10" % "1.2.0" …Run Code Online (Sandbox Code Playgroud) 我得到了错误Unable to locate NamespaceHandler when using context:annotation-config运行(java -jar)一个由maven-assembly-plugin组装并包含我的项目及其所有依赖项的jar.
正如其他人在forum.springsource.org 线程(消息#7/8)上正确发现的那样,问题出现是因为文件META-INF/spring.handlers和META-INF/spring.schemas存在于不同的jar中,当maven-assembly-plugin在单个文件中重新打包jar时会被覆盖.
查看两个spring - *.jar文件的内容,您可以看到文件位于相对于类路径的相同位置
$ jar tf spring-oxm-3.0.3.RELEASE.jar
META-INF/spring.handlers
META-INF/spring.schemas
org/springframework/oxm/GenericMarshaller.class
...
$ jar tf spring-context-3.0.3.RELEASE.jar
META-INF/spring.handlers
META-INF/spring.schemas
org/springframework/context/ApplicationContext.class
Run Code Online (Sandbox Code Playgroud)
是不是可以将META-INF文件夹放在特定的包中?如果是这样,我建议的想法(希望它是适用的)是将META-INF/spring.shemas和META-INF/spring.handlers文件放在他们引用的包下面.
$ jar tf spring-oxm-3.0.3.RELEASE.jar
org/springframework/oxm/META-INF/spring.schemas
org/springframework/oxm/META-INF/spring.handlers
org/springframework/oxm/GenericMarshaller.class
...
$ jar tf spring-context-3.0.3.RELEASE.jar
org/springframework/context/META-INF/spring.handlers
org/springframework/context/META-INF/spring.schemas
org/springframework/context/ApplicationContext.class
Run Code Online (Sandbox Code Playgroud)
这样,在单个jar中合并时它们不会发生冲突.你怎么看待这件事?
我从Eclipse导出我的项目并使用此链接中的说明导入到Android Studio:http://developer.android.com/sdk/installing/migrate.html
当我构建时,我有一个错误:
Duplicate files copied in APK META-INF/DEPENDENCIES
Run Code Online (Sandbox Code Playgroud)
搜索后,我找到了一个解决方案:添加
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
}
Run Code Online (Sandbox Code Playgroud)
进入build.gradle.它的工作原理!
但我不明白为什么我有这个错误以及为什么我必须应用该修复.谁能解释一下?
我正在开发一个使用JAAS的项目,不幸的是,Tomcat需要将一个文件放在战争根源的META-INF文件夹中
app.war
|__META-INF
| |___context.xml
...
Run Code Online (Sandbox Code Playgroud)
我认为它已经很奇怪,因为WAR的默认META-INF位置在类文件夹中.
app.war
|__WEB-INF
| |__classes
| |__META-INF
...
Run Code Online (Sandbox Code Playgroud)
所以我正在使用Maven,它声明src/main/resources/META-INF中的任何内容都将被复制到适当的位置.奇怪的是,它还在文件结构的根目录中创建了一个META-INF文件夹,留下了2个META-INF文件夹.
项目结构
app
|__src/main/java
|__src/main/resources
| |__META-INF
| |__context.xml
...
Run Code Online (Sandbox Code Playgroud)
mvn包之后
app
|__META-INF [1]
|__WEB-INF
| |__classes
| |__META-INF [2]
| |__context.xml
...
Run Code Online (Sandbox Code Playgroud)
因此,如果战争标准规定META-INF应该在类文件夹下,如#2,为什么maven war会创建#1文件夹.有没有办法让它将文件复制到该文件夹而不是#2?
问候
我在我的移动应用程序中添加了一些内容,例如添加或动画列表。问题是几天前我可以完美地生成 APK,自从你添加这些东西的那一刻起,Android Studio 就不允许我生成它们。它有以下错误。
条目名称“META-INF/androidx.vectordrawable_vectordrawable.version”发生冲突
或者这些其他的:
任务“:app:packageDebug”执行失败。执行 com.android.build.gradle.internal.tasks.Workers$ActionFacade Entry name 'META-INF/androidx.vectordrawable_vectordrawable.version' 时发生故障发生冲突
我不知道会出现什么问题。非常感谢。
我有自定义注释处理器生成工厂类和META-INF/services/factory.interface.class资源.
注释处理器用于库项目,所有生成的文件都正确打包到AAR中.
当我在应用程序项目中使用注释处理器时,库作为依赖项添加,只有库META-INF/services/factory.interface.class中的类存在APK/META-INF/services/factory.interface.class
经过一番调查,我意识到MergeJavaResourcesTransform在android-gradle-plugin-1.5.0(和2.0.0-alpha3)中寻找合并所有exploded-aars,jars和intermediates/sourceFolderJavaResources
有没有办法合并META-INF从intermediates/classes(这是从哪里注释处理器资源文件获得创建),或使注释处理器创建的文件sourceFolderJavaResources?
到目前为止,我发现的唯一解决方法是添加CopyTask应用程序的buildscript
android.applicationVariants.all { variant ->
def variantName = variant.name
def variantNameCapitalized = variantName.capitalize()
def copyMetaInf = tasks.create "copyMetaInf$variantNameCapitalized", Copy
copyMetaInf.from project.fileTree(javaCompile.destinationDir)
copyMetaInf.include "META-INF/**"
copyMetaInf.into "build/intermediates/sourceFolderJavaResources/$variantName"
tasks.findByName("transformResourcesWithMergeJavaResFor$variantNameCapitalized").dependsOn copyMetaInf
}
Run Code Online (Sandbox Code Playgroud)
但我不打算强制编译库,用户除了添加依赖项之外还做更多的事情.
Gradle : 4.10.1 Gradle Android Plugin version : 3.3.2 Proguard : 6.0.3 JDK - 1.9 Android Studio 3.3.2 When I try to build apk release version along with Proguard. I get the following error -
Caused by: java.io.IOException: Please correct the above warnings first.
at proguard.InputReader.execute(InputReader.java:149)
at proguard.ProGuard.readInput(ProGuard.java:255)
at proguard.ProGuard.execute(ProGuard.java:96)
......
Run Code Online (Sandbox Code Playgroud)
This seems to be caused due to this -
Warning: class [META-INF/versions/9/module-info.class] unexpectedly contains class [module-info]
Note: duplicate definition of program class [module-info]
Note: there were 20 duplicate class …Run Code Online (Sandbox Code Playgroud) 我是java和android开发的新手并且学习我试图从应用程序开始收集像munin那样的统计和信息.我试图能够在我的应用程序中加载"插件".这些插件已经在应用程序中,但我不想单独调用它们,但能够迭代它们.我试图使用serviceloader,但永远不会将META-INF /服务放入我的apk中.所以我想知道是否有可能在android上使用serviceloader谢谢
编辑:我问的是java.util.ServiceLoader,我认为它应该,但我无法弄清楚如何将我的服务文件夹放到META-INF上APK