나는 이것을 알아 내려고 너무 많은 시간을 보냈습니다. 이것은 가장 단순한 것이어야하며 Java 응용 프로그램을 jar 파일로 배포하는 모든 사용자는이를 처리해야합니다.프로덕션 환경에서 jar를 테스트하고 실행할 때 사용할 수있는 MANIFEST.MF를 어떻게 만듭니 까?
테스트 할 때 버전 정보에 액세스 할 수 있도록 Java 응용 프로그램에 버전을 추가하는 적절한 방법을 알고 싶습니다. Eclipse에서 디버깅 및은 병에서 실행됩니다. 이 /META-INF/MANIFEST.MF를 생성
<target name="jar" depends = "compile">
<property name="version.num" value="1.0.0"/>
<buildnumber file="build.num"/>
<tstamp>
<format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>
<manifest file="${build}/META-INF/MANIFEST.MF">
<attribute name="Built-By" value="${user.name}" />
<attribute name="Built-Date" value="${TODAY}" />
<attribute name="Implementation-Title" value="MyApp" />
<attribute name="Implementation-Vendor" value="MyCompany" />
<attribute name="Implementation-Version" value="${version.num}-b${build.number}"/>
</manifest>
<jar destfile="${build}/myapp.jar" basedir="${build}" excludes="*.jar" />
</target>
와 내가 thusly 히 이클립스에서 디버깅있어 값을 읽을 수 있습니다 :
public MyClass()
{
try
{
InputStream stream = getClass().getResourceAsStream("/META-INF/MANIFEST.MF");
Manifest manifest = new Manifest(stream);
Attributes attributes = manifest.getMainAttributes();
String implementationTitle = attributes.getValue("Implementation-Title");
String implementationVersion = attributes.getValue("Implementation-Version");
String builtDate = attributes.getValue("Built-Date");
String builtBy = attributes.getValue("Built-By");
}
catch (IOException e)
{
logger.error("Couldn't read manifest.");
}
을 여기
내가 내 build.xml 파일에있는 무엇 내가 jar 파일을 만들 때
}
그러나, 그것은 다른 항아리의 매니페스트로드 (응용 프로그램에 의해로드 아마도 첫 번째 항아리 - 내 경우, activation.jar을에).
또한 적절한 값이 모두 매니페스트 파일에 있지만 다음 코드는 작동하지 않습니다.
Package thisPackage = getClass().getPackage();
String implementationVersion = thisPackage.getImplementationVersion();
아이디어가 있으십니까?
를 제 3 자 라이브러리를 사용하여 실제 응용 프로그램에서, 이것은 잘못된를 반환 상당히 가능성이 명백한. –
클래스 이름은 대문자로 시작해야합니다. packageVersion 대신 PackageVersion이어야합니다. – Carlos