Hibernate Annoation только пучок - PullRequest
0 голосов
/ 22 октября 2018

Я ищу артефакт Maven, который содержит только аннотацию гибернации без ядра гибернации.Я пытаюсь получить небольшой комплект моделей.

Похоже, что до спящего режима 3 было: https://mvnrepository.com/artifact/org.hibernate/hibernate-annotations

Кажется, что общие аннотации не содержат @Type и многие другие https://mvnrepository.com/artifact/org.hibernate.common/hibernate-commons-annotations

Какова лучшая практика для этого случая?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Отказ от ответственности : я не знаю, разрешено ли это по hibernate лицензии

Вы можете извлечь org.hibernate.annotations пакетк вашей последней банке.У вас будет зависимость времени компиляции от hibernate-core, но в ваш окончательный jar будет включен только пакет org.hibernate.annotations.

Использование maven-dependency-plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.8</version>
    <executions>
      <execution>
        <id>extract-hibernate-annotations</id>
        <phase>process-resources</phase>
        <goals>
          <goal>unpack</goal>
        </goals>
        <configuration>
          <artifactItems>
            <artifactItem>
              <groupId>org.hibernate</groupId>
              <artifactId>hibernate-core</artifactId>
              <version>5.3.7.Final</version>
            </artifactItem>
          </artifactItems>
          <outputDirectory>${project.build.outputDirectory}</outputDirectory>
          <includes>org/hibernate/annotations/**</includes>
        </configuration>
      </execution>
    </executions>
  </plugin>

И вам придетсядобавьте hibernate-core в качестве предоставленной зависимости:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>5.3.7.Final</version>
  <scope>provided</scope>
</dependency>

Тестирование:

Main.java:

import org.hibernate.annotations.SQLDelete;

@SQLDelete(sql = "delete from whatever where id = ?")
public class Main {
  public static void main(String[] args) {
    SQLDelete annotation = Main.class.getAnnotation(SQLDelete.class);
    System.out.println("Sql delete = " + annotation);
    System.out.println("Sql = " + annotation.sql());
    try {
      Class.forName("org.hibernate.Session");
    } catch (ClassNotFoundException e) {
      System.out.println("org.hibernate.Session is not present");
    }
  }
}

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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.caco3</groupId>
  <artifactId>so</artifactId>
  <version>1.0-SNAPSHOT</version>


  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.8</version>
        <executions>
          <execution>
            <id>extract-hibernate-annotations</id>
            <phase>process-resources</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>org.hibernate</groupId>
                  <artifactId>hibernate-core</artifactId>
                  <version>5.3.7.Final</version>
                </artifactItem>
              </artifactItems>
              <outputDirectory>${project.build.outputDirectory}</outputDirectory>
              <includes>org/hibernate/annotations/**</includes>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass>
                Main
              </mainClass>
            </manifest>
          </archive>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.3.7.Final</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

</project>

Сборка:

$ mvn package
$ java -jar target/so-1.0-SNAPSHOT.jar

Выход:

Sql delete = @org.hibernate.annotations.SQLDelete(callable=false, check=NONE, sql=delete from whatever where id = ?)
Sql = delete from whatever where id = ?
org.hibernate.Session is not present

Содержимое банки:

├── Main.class
├── META-INF
│   ├── MANIFEST.MF
│   └── maven
│       └── com.caco3
│           └── so
│               ├── pom.properties
│               └── pom.xml
└── org
    └── hibernate
        └── annotations
            ├── AccessType.class
            ├── Any.class
            ├── AnyMetaDef.class
            ├── AnyMetaDefs.class
            ├── AttributeAccessor.class
            ├── BatchSize.class
            ├── Cache.class
            ├── CacheConcurrencyStrategy$1.class
            ├── CacheConcurrencyStrategy.class
            ├── CacheModeType$1.class
            ├── CacheModeType.class
            ├── Cascade.class
            ├── CascadeType.class
            ├── Check.class
            ├── CollectionId.class
            ├── CollectionType.class
            ├── ColumnDefault.class
            ├── Columns.class
            ├── ColumnTransformer.class
            ├── ColumnTransformers.class
            ├── CreationTimestamp.class
            ├── DiscriminatorFormula.class
            ├── DiscriminatorOptions.class
            ├── DynamicInsert.class
            ├── DynamicUpdate.class
            ├── Entity.class
            ├── Fetch.class
            ├── FetchMode.class
            ├── FetchProfile$FetchOverride.class
            ├── FetchProfile.class
            ├── FetchProfiles.class
            ├── Filter.class
            ├── FilterDef.class
            ├── FilterDefs.class
            ├── FilterJoinTable.class
            ├── FilterJoinTables.class
            ├── Filters.class
            ├── FlushModeType.class
            ├── ForeignKey.class
            ├── Formula.class
            ├── Generated.class
            ├── GenerationTime.class
            ├── GeneratorType.class
            ├── GenericGenerator.class
            ├── GenericGenerators.class
            ├── Immutable.class
            ├── Index.class
            ├── IndexColumn.class
            ├── JoinColumnOrFormula.class
            ├── JoinColumnsOrFormulas.class
            ├── JoinFormula.class
            ├── LazyCollection.class
            ├── LazyCollectionOption.class
            ├── LazyGroup.class
            ├── LazyToOne.class
            ├── LazyToOneOption.class
            ├── ListIndexBase.class
            ├── Loader.class
            ├── ManyToAny.class
            ├── MapKeyType.class
            ├── MetaValue.class
            ├── NamedNativeQueries.class
            ├── NamedNativeQuery.class
            ├── NamedQueries.class
            ├── NamedQuery.class
            ├── Nationalized.class
            ├── NaturalIdCache.class
            ├── NaturalId.class
            ├── NotFoundAction.class
            ├── NotFound.class
            ├── OnDeleteAction.class
            ├── OnDelete.class
            ├── OptimisticLock.class
            ├── OptimisticLocking.class
            ├── OptimisticLockType.class
            ├── OrderBy.class
            ├── ParamDef.class
            ├── Parameter.class
            ├── Parent.class
            ├── Persister.class
            ├── Polymorphism.class
            ├── PolymorphismType.class
            ├── Proxy.class
            ├── QueryHints.class
            ├── ResultCheckStyle.class
            ├── RowId.class
            ├── SelectBeforeUpdate.class
            ├── Sort.class
            ├── SortComparator.class
            ├── SortNatural.class
            ├── SortType.class
            ├── Source.class
            ├── SourceType.class
            ├── SQLDeleteAll.class
            ├── SQLDelete.class
            ├── SqlFragmentAlias.class
            ├── SQLInsert.class
            ├── SQLUpdate.class
            ├── Subselect.class
            ├── Synchronize.class
            ├── Table.class
            ├── Tables.class
            ├── Target.class
            ├── Tuplizer.class
            ├── Tuplizers.class
            ├── Type.class
            ├── TypeDef.class
            ├── TypeDefs.class
            ├── UpdateTimestamp.class
            ├── ValueGenerationType.class
            ├── Where.class
            └── WhereJoinTable.class
0 голосов
/ 29 октября 2018

Я не знаю jibernate jar, который будет содержать только чистые аннотации, включая @Type и ничего более связанного с hibernate.

Я пытаюсь угадать, вы хотите получить jar, который будет содержать код, который использует @Введите аннотацию в импорте, но не зависит от hibernate-core.

Используйте при условии maven scope для этого случая.

Google говорит

Область зависимости Maven - предоставляется.Предоставленная область зависимостей Maven используется во время сборки и тестирования проекта.Они также должны запускаться, но не должны экспортироваться, поскольку зависимость будет предоставлена ​​средой выполнения, например, контейнером сервлета или сервером приложений.

Что означает ', необходимый для запуска 'и' будут предоставлены ', здесь classpath должен загружать

org.hibernate.annotations.Type 

Из любого места, скорее всего из существующего jiber-ядра, но на самом деле это не такнадо быть точно hibernate-core.Координаты класса Java: имя_класса + пакет + загрузчик классов.Есть некоторые соображения относительно имен специальных пакетов, таких как java.lang , но не для org.hibernate. *, если вы создадите свой собственный jar-файл, который будет содержать этот же пакет + аннотацию сто же имя, эффект будет таким же.

Другими словами, вы можете создать свою собственную аннотацию @Type в своем собственном банке, если вы строго не хотите использовать ее из hibernate-core.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...