Мне очень нужна уникальная ситуация и мне нужен совет: Я работаю над проектом, который зависит от другого проекта от моей же компании, и теперь мне нужно применить некоторые изменения к зависимость. Проблема, которая у меня есть, заключается в том, что исходный код из зависимостей был потерян, поэтому единственное, что у меня есть, - это зависимость от maven в репозитории, с соответствующим файлом jar. Кроме того, некоторые классы в файле Jar, созданные с использованием парсера JiBX, отображающие некоторые файлы XSD, которые у меня отсутствуют, и полученные классы являются синтетическими, и я не нашел декомпилятора, способного правильно их обрабатывать.Заменить файлы классов перед сборкой maven
Единственная хорошая вещь все, что в том, что класс, который нужно изменить может быть правильно декомпилированы, так пошел за следующее:
- Я декомпилированы весь файл банку и в конечном итоге с некоторыми классами ( JiBx) с пустым или ошибочно реализованным методом.
- Я прокомментировал тело неправильных методов, чтобы иметь объекты-заглушки, применил необходимые изменения к правильным классам и перекомпилировал.
- Я взял старый файл Jar, открыл его и вручную заменил старый класс на новый.
И полученный Jar работал должным образом.
Теперь мой вопрос: могу ли я сделать все это с помощью Maven?
Идея заключается в том, чтобы поместить файлы классов JiBX как ресурсы, и сохранить заглушки эквивалентов в качестве исходных файлов, а затем пусть Maven:
- Компиляции все как обычно, вкладывая все скомпилированные файлы классов в цель folder
- Удалить файлы классов-заглушек из целевой папки и заменить их на старые файлы с предварительно скомпилированными файлами
- пакет банку.
Какой подход вы бы порекомендовали?
UPDATE
Даю еще некоторые подробности о структуре проекта зависимость:
Все классы в том же пакете: классы
my.project.domain.JiBX__c_GeneratedObfuscatedClass1.java
my.project.domain.JiBX__c_GeneratedObfuscatedClass2.java
my.project.domain.JiBX__c_GeneratedObfuscatedClass3.java
my.project.domain.CustomizableClass1.java
my.project.domain.CustomizableClass2.java
my.project.domain.CustomizableClass3.java
JiBX не импортируются правильно, как зависимость и если я попытаюсь поместить любой из CustmizableClasses в источник проекта и позволить JiBX-членам быть зависимыми, компилятор сообщает о отсутствующих методах.
Я также пробовал использовать Shade Plugin, как было предложено, но так как мне нужно включить классы JiBX в исходный путь, мне придется включить в классы JiBX из jar-зависимостей и скомпилировать CustomizableClasses, но пропустить CustomizableClasses из jar dep и скомпилированные классы JiBX.
Похоже, он может работать, но я признаю, что до сих пор не нашел способ сделать это. Любые подсказки будут очень приветствоваться.
UPDATE 2 (РАЗРЕШЕНИЕ)
Я здесь объяснить, как я, наконец, удалось это с помощью плагина тени, как это предлагается, только в случае, если кто-то должен делать то же самое:
я, наконец, создал проект с декомпилированными классами внутри одного и того же пакета, и оставили методы, которые не хотят декомпилироваться, закомментированы.
В pom.xml я добавил следующее:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<includes>
<include>${project.groupId}:${project.artifactId}</include>
<include>TheDamnedProject:WithoutSources</include>
</includes>
</artifactSet>
<filters>
<filter>
<artifact>TheDamnedProject:WithoutSources</artifact>
<includes>
<!-- These classes will be taken directly from dependency JAR -->
<include>my/package/ClassWhichCouldNotBeDecompiled1.class</include>
<include>my/package/ClassWhichCouldNotBeDecompiled2.class</include>
<include>my/package/ClassWhichCouldNotBeDecompiled3.class</include>
<include>my/package/ClassWhichCouldNotBeDecompiled4.class</include>
</includes>
</filter>
<filter>
<artifact>${project.groupId}:${project.artifactId}</artifact>
<excludes>
<!-- These classes will be overridden by the ones inside the JAR -->
<exclude>my/package/ClassWhichCouldNotBeDecompiled1.class</exclude>
<exclude>my/package/ClassWhichCouldNotBeDecompiled2.class</exclude>
<exclude>my/package/ClassWhichCouldNotBeDecompiled3.class</exclude>
<exclude>my/package/ClassWhichCouldNotBeDecompiled4.class</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
спасибо!
Карлес
Вам нужно, чтобы это происходило динамически?Будет ли недостаток в развертывании вашего измененного JAR и просто ссылка на него как зависимость? –
Я могу сделать это вручную, но это второй раз, когда мне нужно изменить это за короткий промежуток времени, и я не могу гарантировать, что следующий разработчик поймет, что происходит, поэтому я предпочитаю сделать это как можно более автоматическим. –
См. Также http://stackoverflow.com/q/1832853/545127 – Raedwald