Добавление банок по DB2 на Java веб-приложения с помощью Maven
Я пытаюсь добавить следующие банки db2 в мое веб-приложение Java с помощью Maven...
db2jcc_license_cu.jar
db2jcc_javax.jar
db2jcc.jar
Я следую инструкциям, опубликованным в этом посте...
могу ли я добавить jars в Maven 2 build classpath, не устанавливая их?
Я хочу использовать статическое решение для репозитория в проекте. Пока что да...
- создал папку в моем корневом каталоге с именем lib. Внутри этого
каталог живет в трех банках db2. - добавил следующее К моему пом файл...
<repository>
<id>lib</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>file://${project.basedir}/lib</url>
</repository>
</repositories>
<dependency>
<groupId>com.ibm.db2.jcc</groupId>
<artifactId>db2jcc</artifactId>
<version>3.8.47</version>
</dependency>
<dependency>
<groupId>com.ibm.db2.jcc</groupId>
<artifactId>db2jcc_license_cu</artifactId>
<version>3.8.47</version>
</dependency>
Но когда я запускаю установку maven, я получаю ...
[WARNING] The POM for com.ibm.db2.jcc:db2jcc:jar:3.8.47 is missing, no dependency information available
[WARNING] The POM for com.ibm.db2.jcc:db2jcc_license_cu:jar:3.8.47 is missing, no dependency information available
У меня есть версия кувшины работает...
Java com.компания IBM.в DB2.СКК.DB2Jcc-version
Правильно ли я указал эту информацию о версии? Может ли кто-нибудь предположить, что я делаю неправильно?
3 ответов:
Проблема в том, что вы неправильно установили jars в вашем "project-maven-repository" (т. е. в папке
${project.basedir}/lib)Maven хранит (когда вы делаете
mvn install) файлы jar в репозитории maven. Хранилище maven имеет четкую иерархическую структуру. Вот упрощенное видение этой структуры:
- артефакт
groupId+artifactIdОпределите первую часть пути к папке (в репозитории), в которой хранится артефакт.- артефакт
versionявляется второй частью путь к папке- артефакт
versionтакже является суффиксом к имени артефактаartifactId- это имя артефакта- упаковка-это расширение артефакта (по умолчанию jar)
По умолчанию maven использует репозиторий, расположенный под
<USER_HOME>/.m2/repositoryРешение, которое вы пытаетесь настроить, использует другое расположение для репозитория:
Вот почему вам нужно организовать вашу папку${project.basedir}/libи даже если это не расположение репозитория по умолчанию, это все равно maven-репозиторий , и поэтому maven ожидает, что найдите обычную иерархию репозитория maven в этом расположении.${project.basedir}/libтак же, как хранилище maven. Это объясняется в этой части ссылочного поста :Используйте Maven для установки в project repo
Вместо того, чтобы создавать эту структуру вручную, я рекомендую использовать плагин Maven для установки ваших банок в качестве артефактов. Итак, чтобы установить артефакт в хранилище проекта в папке repo выполнить:
mvn install:install-file -DlocalRepositoryPath=lib -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]Если вы выберете этот подход, вы сможете упростить объявление репозитория в pom до:
<repository> <id>repo</id> <url>file://${project.basedir}/lib</url> </repository>Поэтому вам нужно сделать
mvn install, чтобы создать иерархию${project.basedir}/lib(Вы можете сделать это вручную, но это не рекомендуется и подвержено ошибкам).В вашем случае команды для запуска будут выглядеть следующим образом: (предполагая, что вы поместите jar в свой HOME_DIR и выполните эту команду в своем
${project.basedir})
mvn install:install-file -DlocalRepositoryPath=lib -DcreateChecksum=true -Dpackaging=jar -Dfile=<USER_HOME>/db2jcc_license_cu.jar -DgroupId=com.ibm.db2.jcc -DartifactId=db2jcc_license_cu -Dversion=3.8.47Что такое преимущества выбранного подхода:
- разработчик без установки maven будет иметь библиотеки, доступные внутри исходных текстов проекта, в системе SCM.
- Вы можете легко ссылаться на банки, которые не находятся в общедоступном репозитории maven без необходимости в чем-то вроде artifactory или nexus
Недостатки:
- довольно сложная структура папок под
${project.basedir}/libвыглядит очень странно для кого-то, кто не привык работать с знаток.- Вы будете хранить библиотеки под SCM (множество огромных двоичных файлов)
Другим решением было бы загрузить эти банки до руки и поместить их куда-нибудь относительно вашего проекта (например, в каталог
lib). Теперь просто сказать Maven для использования этих фляг. Вот тут тоgroupId,artifactdIdиversionявляются JFYI, так как они не будут использоваться для загрузки чего-либо.Достоинством этого решения является то, что вам не придется создавать репозиторий maven.
<dependencies> ... <dependency> <groupId>com.ibm.db2.jcc</groupId> <artifactId>licences</artifactId> <version>1.0</version> <!-- Adjust this properly --> <scope>system</scope> <systemPath>${basedir}/lib/db2jcc_license_cu.jar</systemPath> </dependency> <dependency> <groupId>com.ibm.db2.jcc</groupId> <artifactId>db2jcc4</artifactId> <version>1.0</version> <!-- Adjust this properly --> <scope>system</scope> <systemPath>${basedir}/lib/db2jcc4.jar</systemPath> </dependency> <dependency> <groupId>com.ibm.db2.jcc</groupId> <artifactId>db2jcc_javax</artifactId> <version>1.0</version> <!-- Adjust this properly --> <scope>system</scope> <systemPath>${basedir}/lib/db2jcc_javax.jar</systemPath> </dependency> </dependencies>См. Ссылку (На Японском): Mavenリポジトリで提供されていないサードパーティJarをどうするか
Я думаю, что у этих банок нет помпона.XML. Отсюда и предупреждение. Если банки упакованы и приложение работает, то я думаю, что у вас нет проблем.
Comments