Добавление банок по DB2 на Java веб-приложения с помощью Maven



Я пытаюсь добавить следующие банки db2 в мое веб-приложение Java с помощью Maven...



db2jcc_license_cu.jar  
db2jcc_javax.jar
db2jcc.jar


Я следую инструкциям, опубликованным в этом посте...
могу ли я добавить jars в Maven 2 build classpath, не устанавливая их?



Я хочу использовать статическое решение для репозитория в проекте. Пока что да...




  1. создал папку в моем корневом каталоге с именем lib. Внутри этого
    каталог живет в трех банках db2.

  2. добавил следующее К моему пом файл...



 <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




Правильно ли я указал эту информацию о версии? Может ли кто-нибудь предположить, что я делаю неправильно?

481   3  

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

    Ничего не найдено.