LINUX.ORG.RU

[Java][Spring3][console]

 ,


0

2

Есть консольное приложение в виде единого jar'а со всеми зависимостями, которое с помощью JPA/Hibernate генерирует тестовые данные для веб-приложения. При этом консольное приложение использует спринговые бины из веб-приложения, для которого данные и генерятся. Всё прекрасно работает, пока есть связь с Интернетами. Когда есть только интранеты, при инициализации GenericXmlApplicationContext пролетают такие исключения:

org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/tool/spring-tool-3.0.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
Этот spring-tool-3.0.xsd есть в jar'е, также там есть /META-INF/spring.handlers с /META-INF/spring.schemas. Однако, в spring.schemas нет ссылки на spring-tool-3.0.xsd. Это баг в спринге? Кто сталкивался/что делать?

★★★★★

Нет, это не баг, в spring.schemas должна быть ссылка на spring-tool-3.0.xsd. Надо собирать jar-рник так, чтобы в spring.schemas были ссылки на все используемые схемы.

Например, тут в последнем посте для этого используется transformer при сборки maven-ом.

ma1uta ★★★
()
Ответ на: комментарий от ma1uta

Да, заменил использовавшийся ранее maven-assembly-plugin на такую конструкцию:


            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>1.5</version>
                <executions>
                    <execution>
                        <id>merge-spring-config-files</id>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.handlers</resource>
                                </transformer>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.schemas</resource>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>

                    <execution>
                        <id>transform-manifest</id>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <manifestEntries>
                                        <Main-Class>${app.main.class}</Main-Class>
                                        <X-Compile-Source-JDK>${maven.compile.source}</X-Compile-Source-JDK>
                                        <X-Compile-Target-JDK>${maven.compile.target}</X-Compile-Target-JDK>
                                    </manifestEntries>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>

                </executions>
            </plugin>
...и файлы стали правильно сливаться, а исключение пропало. Спасибо за наводку!

asaw ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.