Могу ли я предотвратить доступ javac к Class-Path из манифестов наших сторонних файлов? - PullRequest
6 голосов
/ 27 сентября 2010

Начиная с Java 1.5 или около того, javac изучал манифест сторонних jar-файлов, чтобы найти другие jar-файлы.Это вызывает ряд нежелательных побочных эффектов:

  1. Поскольку файлы JAR были переименованы, теперь мы получаем поток предупреждений всякий раз, когда мы компилируем (может быть набран с помощью -Xlint:-path)
  2. Файлы, которые мы не хотим видеть на пути к классам, возвращаются на него, даже если по какой-то причине они были исключены.
  3. В сборке требуется дополнительное время для поиска всех этих дополнительных jar-файлов,из-за разрешения этого материала мы на самом деле не хотим.

Так что мне было интересно, знает ли кто-нибудь магический вызов, чтобы отключить это.Предполагая, что Sun не оседлала нас другой функцией, которая нам не нужна, и не сможет отключиться, как только она у нас появится.

Ответы [ 2 ]

2 голосов
/ 17 марта 2011

Вот цель Ant для изменения файлов манифеста (использует ant-contrib)

<target name="util-modify-manifest" depends="build-classpath">
<for param="file">
    <fileset dir="${jars}" >
        <include name="**/*.jar" />
    </fileset>
    <sequential>
        <jar jarfile="@{file}" destfile="@{file}" update="true">
            <manifest>
                <attribute name="Class-Path" value="" />
                <attribute name="Export-Package" value="" />
            </manifest>
        </jar>
        <echo message="Manifest Replaced: @{file}" />
    </sequential>
</for>

1 голос
/ 27 сентября 2010

Используйте bnd или shade, чтобы убрать поврежденную запись MANIFEST.MF из банок вместо простого переименования. Или воспользуйтесь тем, что эти пути по сути никогда не бывают абсолютными. Если вы переместите банку с именем «i-have-a-ClassPath.jar» в ее собственный подкаталог, записи пути к классам манифеста не смогут найти эти другие баночки в ожидаемых местах. Я полагаю, что это все еще будет скулить, если вы включите достаточно пуха.

...