Maven Build - уменьшен размер файлов классов - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь создать существующий проект. Мне удалось создать файл EAR (поскольку мне нужно развернуть в Websphere). Когда я пытаюсь выполнить развертывание, используя консоль администратора, могу успешно установить, но приложение не работает. После исследования я обнаружил, что размер class files очень меньше по сравнению с эталонным EAR-файлом (старый существующий EAR-файл)

Шаги, которые я выполнил для создания файла EAR

  1. Плагин M2E установлен
  2. Настроить на Maven
  3. Добавить ALL jar-файлы из папки lib, как показано ниже (я читал в SO, это не рекомендуемый способ, но для завершения проекта я должен это сделать)
<dependency>
<groupId>JarFile</groupId>
<artifactId>JarFile</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/WebContent/WEB-INF/lib/CRDBXMLExternal.jar</systemPath>
</dependency>
  1. Добавлены соответствующие плагины (war, EAR)
  2. Чистая сборка и установка.
  3. ear файл создан. ear содержит файл war, который содержит все файлы, относящиеся к проекту, включая class, jsp и т. Д.

Я сравнил структуру папок с существующим файлом EAR и его содержимым, все выглядит хорошо. Но только размер файлов классов (не ВСЕ, но более 80%) варьируется. Я использую JD для decompile и вижу код, большая часть кода отсутствует, включая imports.

Если кто-то сталкивался с подобной проблемой, скажите, пожалуйста, что я делаю не так?

Подробнее

есть две папки проекта (обе maven), одна создаст WAR, а другая EAR в EAR pom.xml есть зависимость

<dependency>
		<groupId>com.comp.abc</groupId>
		<artifactId>abc</artifactId>
		<version>1.0</version>
		<type>war</type>
	</dependency>

Тогда есть плагин

<build>
    <plugins>
		<plugin>
			<artifactId>maven-ear-plugin</artifactId>
			<version>2.10</version>
			<configuration>
				<version>5</version>
				<defaultLibBundleDir>lib</defaultLibBundleDir>
				<generatedDescriptorLocation>C:\COMP\Dev\may\repos\0.0.1-SNAPSHOT</generatedDescriptorLocation>
			</configuration>
		</plugin>      
    </plugins>
  </build>

Добавление построения WAR-файла (убрано большинство зависимостей, сохранен только один пример) POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.comp.abc</groupId>
	<artifactId>abc</artifactId>
	<version>1.0</version>
	<packaging>war</packaging>
	<name>ABC</name>
	<description>ABC</description>

	<dependencies>
		<!-- Local Repository -->
		<dependency>
			<groupId>com.ibm.ws.runtime</groupId>
			<artifactId>com.ibm.ws.runtime</artifactId>
			<version>1.0</version>
			<scope>system</scope>
			<systemPath>${basedir}/WebContent/WEB-INF/lib/com.ibm.ws.runtime.jar</systemPath>
		</dependency>
	</dependencies>



	<repositories>
		<repository>
			<id>nexus-releases</id>
			<name>nexus</name>
			<url>http://abc-nexus.ldn.xyz.com:9080/nexus/content/groups/public/</url>
		</repository>
	</repositories>

	<build>
		<sourceDirectory>src</sourceDirectory>
		<resources>
			<resource>
				<directory>src</directory>
				<excludes>
					<exclude>**/*.java</exclude>
				</excludes>
			</resource>
		</resources>
		<plugins>			
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.3</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<!-- <warSourceDirectory>${project.basedir}\WebContent</warSourceDirectory> -->
					<warSourceDirectory>WebContent</warSourceDirectory>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Проблема была, web/WebContent/WEB-INF/classes не обновляется. но я мог видеть последний classes под web/target/classes путем. Сейчас проверяю, почему web/WebContent/WEB-INF/classes не обновляется.

Только что получил разрешение по ссылке ниже: - ВОПРОС, РЕШЕННЫЙ С помощью https://coderanch.com/t/474423/ide/ecplise-doesn-create-classes-folder

Steps

Щелкните правой кнопкой мыши по своему проекту -> путь сборки -> настройте путь сборки -> нажмите на вкладку источника -> нажмите на обзор (папка вывода по умолчанию).

После просмотра нажмите WebContent -> Select WEB-INF -> Create new folder (называемые классами). это откроет новое окно.

Дать имя папки в виде классов. Нажмите на Дополнительно и укажите путь к папке с текущими классами, значит WEB-INF / classes.

После этого eclispe перестроит ваш проект, и классы будут сгенерированы в каталоге WEB-INF / classes.

0 голосов
/ 11 января 2019

Вышеприведенное не говорит Maven для упаковки файла EAR с зависимостью каталога lib. Это фактически говорит ему создать локальную зависимость от существующего JAR, который предоставляется только во время компиляции. Таким образом, когда вы экспортируете EAR, он не включает ни один из JAR-файлов, поскольку предполагает, что они предоставляются во время выполнения.

Вы должны использовать плагин maven-ear, который вместо этого упаковывает файл EAR. Вы можете найти полную документацию здесь .

  <plugin>
    <artifactId>maven-ear-plugin</artifactId>
    <version>3.0.1</version>
  </plugin>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...