我正在构建一个超级jar,我试图提取子库清单文件的版本信息。出于某种原因,清单信息不再出现在jar中。
这曾经是一个使用war插件构建的项目,但是,我无法弄清楚如何使用jar插件获得相同的行为。
这是我目前的配置。我不确定为什么它不再起作用。
如何将图书馆清单信息拉出来或发生什么事情使这不起作用?
可执行的pom文件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>package-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.clearwateranalytics.perseus.worker.PerseusWorker</mainClass>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
<manifestEntries>
<Implementation-Build>${build.number}</Implementation-Build>
<Build-Date>${maven.build.timestamp}</Build-Date>
</manifestEntries>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
图书馆pom
<build>
<resources>
<resource>
<directory>${project.basedir}/src/main/java</directory>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Implementation-Build>${build.number}</Implementation-Build>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
获取构建信息的库方法
private static String getBuildNumber()
{
try
{
Enumeration<URL> resources = ServerVersionDao.class.getClassLoader().getResources("META-INF/MANIFEST.MF");
while (resources.hasMoreElements())
{
try
{
Manifest manifest = new Manifest(resources.nextElement().openStream());
Attributes attributes = manifest.getMainAttributes();
if ("perseus-server-lib".equals(attributes.getValue("Implementation-Title")))
{
String versionNumber = getVersion(ServerVersionDao.class);
String buildNumber = attributes.getValue("Implementation-Build");
String build = "";
if (versionNumber != null)
build += versionNumber;
if (buildNumber != null)
build += " b" + buildNumber;
if (!build.trim().isEmpty())
return build;
}
}
catch (IOException ex)
{
}
}
}
catch (Exception ex)
{
}
throw new IllegalStateException("Got here!!!!");
}
答案 0 :(得分:0)
您好我不认为您可以按预期添加单个MANIFEST。这些类只包含在uber-jar中,而不是作为jar,而是作为包。
但是如果你想要检索作为依赖项之一的特定库的版本(对吗?),你最终可以遵循与上面的代码类似的模式,而不是尝试加载生成的META-INF / MANIFEST,您可以找到所包含的依赖项的版本信息,附近;)
META-INF\maven\perseus/perseus-serverlib\pom.properties
e.g
#Generated by Maven
#Sun Aug 02 13:18:09 PDT 2015
version=1.8.3
groupId=org.jsoup
artifactId=jsoup
试一试:)
在那里你可以找到如下的属性文件:
<div class="container">
<div class="row">
<nav class="navbar navbar-default navbar-lower" role="navigation">
<div class="container">
<div class="container collapse navbar-collapse">
<ul class="nav navbar-nav pull-right">
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
</ul>
</div>
</div>
</nav>
</div>
</div>