标签: meta-inf

META-INF的目的是什么?

在Java中,您经常会看到包含一些元文件的META-INF文件夹.这个文件夹的目的是什么,我可以放在那里?

java meta-inf

282
推荐指数
9
解决办法
24万
查看次数

如何在IntelliJ IDEA中使用SBT构建Uber JAR(Fat JAR)?

我正在使用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)

scala meta-inf intellij-idea uberjar sbt

85
推荐指数
3
解决办法
7万
查看次数

想法避免spring.handlers/spring.schemas在单个jar中合并多个spring依赖项时会被覆盖

我得到了错误Unable to locate NamespaceHandler when using context:annotation-config运行(java -jar)一个由maven-assembly-plugin组装并包含我的项目及其所有依赖项的jar.

正如其他人在forum.springsource.org 线程(消息#7/8)上正确发现的那样,问题出现是因为文件META-INF/spring.handlersMETA-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.shemasMETA-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中合并时它们不会发生冲突.你怎么看待这件事?

spring meta-inf maven-assembly-plugin

35
推荐指数
1
解决办法
2万
查看次数

Android Studio:编译时在APK META-INF/DEPENDENCIES中复制的重复文件

我从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.它的工作原理!

但我不明白为什么我有这个错误以及为什么我必须应用该修复.谁能解释一下?

android meta-inf duplicates android-studio

35
推荐指数
4
解决办法
4万
查看次数

Java Meta-Inf服务

Java中Meta-INF服务的目的是什么?

java meta-inf

20
推荐指数
2
解决办法
1万
查看次数

Maven war在两个地方都有META-INF文件夹

我正在开发一个使用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?

问候

meta-inf war package maven

16
推荐指数
1
解决办法
1万
查看次数

问题“条目名称 'META-INF...' 冲突 - Android

我在我的移动应用程序中添加了一些内容,例如添加或动画列表。问题是几天前我可以完美地生成 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' 时发生故障发生冲突

我不知道会出现什么问题。非常感谢。

mobile android meta-inf apk android-studio

16
推荐指数
5
解决办法
2万
查看次数

注释处理器生成的资源未打包到APK

我有自定义注释处理器生成工厂类和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-INFintermediates/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)

但我不打算强制编译库,用户除了添加依赖项之外还做更多的事情.

android annotations meta-inf gradle

15
推荐指数
1
解决办法
877
查看次数

META-INF/version duplicate error when using Proguard

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)

android meta-inf proguard android-gradle-plugin

15
推荐指数
1
解决办法
4829
查看次数

在android上使用serviceloader

我是java和android开发的新手并且学习我试图从应用程序开始收集像munin那样的统计和信息.我试图能够在我的应用程序中加载"插件".这些插件已经在应用程序中,但我不想单独调用它们,但能够迭代它们.我试图使用serviceloader,但永远不会将META-INF /服务放入我的apk中.所以我想知道是否有可能在android上使用serviceloader谢谢
编辑:我问的是java.util.ServiceLoader,我认为它应该,但我无法弄清楚如何将我的服务文件夹放到META-INF上APK

java android meta-inf serviceloader

12
推荐指数
2
解决办法
4538
查看次数